有没有人知道MenuDelegate使用< >括号???为什么有人想要像这样复杂一段代码。
@protocol MenuDelegate
- (void)optionSelected:(NSString *)option;
@end
@interface ContentMenu : UITableViewController {
NSMutableArray *_test;
id<MenuDelegate> _delegate;
}
由于
答案 0 :(得分:0)
此语法表示id变量采用名为MenuDelegate的协议。
<小时/> 语法对我来说也很奇怪,但不像调用方法那样奇怪。
答案 1 :(得分:0)
那是协议。 Objective-C中的协议是接口声明。它允许您指定在委托中期望的某组方法,而不强制传入的对象类型。
id<MenuDelegate>
表示实现MenuDelegate
协议的任何类。它保证您可以调用MenuDelegate
协议中指定的函数,而无需担心对象的实际类型。
答案 2 :(得分:0)
正如静态类型允许编译器基于类层次结构测试类型一样,此语法允许编译器基于对协议的一致性来测试类型。有关更多信息,请阅读The Objective-C 2.0 Programming Language。
答案 3 :(得分:0)
查看Apple文档中有关协议的内容
如果您知道对象的类,则可以查看其接口 声明(以及它继承的类的接口声明 from)找到它响应的消息。 这些声明 宣传它可以收到的消息。协议为它提供了一种方法 也宣传它发送的消息。
沟通是双向的;对象发送消息以及 收到他们。例如,一个对象可能会委派责任 对另一个物体的某种操作,或者有时可能只是 需要向另一个对象询问信息。在某些情况下,一个对象 可能愿意将其行为通知其他对象以便他们 可以采取任何可能需要的抵押措施。
如果你开发了发送者的类和接收者的类 作为同一项目的一部分(或者如果其他人为您提供了 接收器及其接口文件),这种通信很容易 协调。发件人只需导入该接口文件即可 接收器。导入的文件声明方法选择发件人 用于它发送的消息。
所以这就是你问题的答案
Why not just put the optionSelected function inside @implementation?