这个语法是什么意思? ID <asdfasdf>?</asdfasdf>

时间:2012-07-12 04:20:52

标签: objective-c ios

有没有人知道MenuDelegate使用&lt; &GT;括号???为什么有人想要像这样复杂一段代码。

@protocol MenuDelegate
    - (void)optionSelected:(NSString *)option;
@end

@interface ContentMenu : UITableViewController {
    NSMutableArray *_test;
    id<MenuDelegate> _delegate;
}

由于

4 个答案:

答案 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?