代表们的目标c

首先,我应该告诉你,我对Objective C或C#知之甚少。所以,当我的一位同事问我是否有类似于Objective C的代表时,我想知道Objective-CI中是否存在这样一个概念,猜测我们使用的代表iphone编程不一样.C#委托是函数指针吗? 在处理多个视图时,这样的设施会很好。我在哪里可以找到信息?

Objective-C中的代表只是一个概念,而不是某种实现工件(如C#中)。 Objective-C中的委托(更好:Cocoa)基本上是一个对象,由任何人使用它作为其发生的某些事件的“委托”。 也可能要求代表代表主机对象执行某些任务。 委托需要实现的接口通常由协议forms化。

@protocol ActionDelegate - (void) actionDidStart: (id) aSender; - (void) actionDidEnd: (id) aSender; @end @interface Action: NSObject { id delegate; } @property (nonatomic,assign) id delegate; @end 

另一方面,C#中的代表是一个实现工件。 有一个专用的delegate关键字来声明委托类型和创建实际的委托实例。

 class Action { delegate void ActionDidStartDelegate(Action sender); delegate void ActionDidEndDelegate(Action sender); ... } 

(我的C#有点生疏,所以语法可能在这里,抱歉;在现实生活中,人们可能会在上述情况下使用事件而不是原始代表)。 基本上,C#委托类似于Python方法对象。

您可以使用Objective-C的新代码块function来模拟委托。 尚未使用此function,我无法对此发表评论。 获得类似内容的另一种方法是使用普通函数指针。

 typedef void (*callback_function)(); - (void) doSomethingWithCallback: (callback_function) func { ... func(); } 

当然,您始终可以使用Cocoa本身经常使用的方法:使用对象和关联的方法选择器:

 - (void) doSomethingWhenDonePerform: (SEL)aSelector onObject: (id) aReceiver { ... [aReceiver perform: aSelector]; } 

C#委托就像Objective-C中的NSInvocations

  • 每个人都知道将成为呼叫目标的对象
  • 每个人都知道将被调用的方法

然而, NSInvocation更进一步:

  • 它知道传递给方法的参数
  • 它可以存储返回值

您可能不会使用NSInvocation来实现类似C#委托(这是代理模式的一种forms)的模式。 我个人选择使用一个对象,它使用运行时的标准消息转发function将它接收的消息转发到目标对象。