1

有谁知道带有 < > 括号的 MenuDelegate 这个语法做什么???以及为什么有人要使这样的一段代码复杂化。

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

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

谢谢

4

4 回答 4

0

就像静态类型允许编译器根据类层次结构测试类型一样,这种语法允许编译器根据协议的一致性来测试类型。有关更多信息,请阅读Objective-C 2.0 编程语言

于 2012-07-12T05:15:04.553 回答
0

查看 Apple 文档中有关协议的内容

如果您知道一个对象的类,您可以查看它的接口声明(以及它所继承的类的接口声明)来查找它响应的消息。这些声明宣传它可以接收的消息。协议为其发送的消息提供了一种广告方式

沟通是双向的;对象发送消息以及接收消息。例如,一个对象可能将某个操作的责任委托给另一个对象,或者它有时可能只需要向另一个对象询问信息。在某些情况下,一个对象可能愿意将其行为通知其他对象,以便它们可以采取任何可能需要的附带措施。

如果您将发送者的类和接收者的类开发为同一个项目的一部分(或者如果其他人向您提供了接收者及其接口文件),那么这种通信很容易协调。发送方只需导入接收方的接口文件。导入的文件声明了发送者在其发送的消息中使用的方法选择器。

所以这是你问题的答案

Why not just put the optionSelected function inside @implementation?
于 2012-07-12T06:35:09.150 回答
0

这种语法意味着 id 变量采用称为 MenuDelegate 的协议。


语法对我来说也很奇怪,但不像调用方法那么奇怪。

于 2012-07-12T04:23:34.520 回答
0

那是协议。Objective-C 中的协议是接口声明。它允许您在委托中指定您期望的一组特定方法,而无需强制传入对象的类型。

id<MenuDelegate>表示任何实现该MenuDelegate协议的类。它保证你可以调用MenuDelegate协议中指定的函数,而不用关心对象的真实类型。

于 2012-07-12T04:24:40.337 回答