Dir*_*irk 15
Objective-C中的代表只是一个概念,而不是某种实现工件(如C#中).Objective-C中的委托(更好:Cocoa)基本上是一个对象,由任何人使用它作为其发生的某些事件的"委托".也可能要求代表代表主机对象执行某些任务.委托需要实现的接口通常由协议形式化.
@protocol ActionDelegate 
- (void) actionDidStart: (id) aSender;
- (void) actionDidEnd: (id) aSender;
@end
@interface Action: NSObject {
    id<ActionDelegate> delegate;
}
@property (nonatomic,assign) id<ActionDelegate> delegate;
@end
另一方面,C#中的代表是一个实现工件.有一个专用的delegate关键字来声明委托类型和创建实际的委托实例.
class Action {
    delegate void ActionDidStartDelegate(Action sender);
    delegate void ActionDidEndDelegate(Action sender);
    ...
}
(我的C#有点生疏,所以语法可能在这里,对不起;在现实生活中,人们可能会在上面的情况下使用事件而不是原始代表).基本上,C#委托类似于Python方法对象.
您可以使用Objective-C的新代码块功能来模拟委托.尚未使用此功能,我无法对此发表评论.获得类似内容的另一种方法是使用普通函数指针.
typedef void (*callback_function)();
- (void) doSomethingWithCallback: (callback_function) func {
    ...
    func();
}
当然,您总是可以使用Cocoa本身经常使用的方法:使用对象和关联的方法选择器:
- (void) doSomethingWhenDonePerform: (SEL)aSelector onObject: (id) aReceiver {
    ...
    [aReceiver perform: aSelector];
}
小智 6
C#委托就像NSInvocations在Objective-C中一样:
然而,NSInvocation更进一步:
你可能不会NSInvocation用来实现像C#delegates这样的模式(这是一种代理模式).我个人选择使用一个对象,它使用运行时的标准消息转发功能将收到的消息转发给目标对象.
| 归档时间: | 
 | 
| 查看次数: | 3178 次 | 
| 最近记录: |