为什么我要制作一个全可选的消息协议?

时间:2009-03-27 19:49:54

标签: cocoa cocoa-touch delegates protocols

我正在为项目编写Cocoa API,API需要一个委托。我提出的协议将所有方法声明为可选方法,但为什么我会这样做而不是仅仅记录头文件中的委托方法并将普通id作为参数?

3 个答案:

答案 0 :(得分:6)

为了您的用户的利益。如果对象使代理符合某些协议并且它们传递了其他内容,则编译器可以告诉它们。如果您使用id并使用类别作为委托方法接口,那么这是不可能的。

答案 1 :(得分:2)

因为“所有这些方法”的选择与允许“你发送的任何东西”不完全相同。

答案 2 :(得分:0)

它还生成在IDE中更有用的代码。例如,如果我正在看

@interface MyController : NSObject <FooBarDelegate> {
}
@end

我可以命令+双击Xcode跳转到FooBarDelegate的定义。有一个类别,没有正式宣布成为代表的意图。

此外,对于后向二进制兼容性和新的首选方法签名,@ required可能成为未来计划的问题。