我正在为项目编写Cocoa API,API需要一个委托。我提出的协议将所有方法声明为可选方法,但为什么我会这样做而不是仅仅记录头文件中的委托方法并将普通id作为参数?
答案 0 :(得分:6)
为了您的用户的利益。如果对象使代理符合某些协议并且它们传递了其他内容,则编译器可以告诉它们。如果您使用id并使用类别作为委托方法接口,那么这是不可能的。
答案 1 :(得分:2)
因为“所有这些方法”的选择与允许“你发送的任何东西”不完全相同。
答案 2 :(得分:0)
它还生成在IDE中更有用的代码。例如,如果我正在看
@interface MyController : NSObject <FooBarDelegate> {
}
@end
我可以命令+双击Xcode跳转到FooBarDelegate的定义。有一个类别,没有正式宣布成为代表的意图。
此外,对于后向二进制兼容性和新的首选方法签名,@ required可能成为未来计划的问题。