没有议定书的Objective-C代表宣言?

时间:2013-05-06 15:38:01

标签: objective-c delegates

我知道我可以在我的.h文件中定义delgate,如下所示:

@property (nonatomic, weak) id <MyClassDelegate> delegate;

我发现这个声明也有效:

@property (nonatomic, weak) id delegate;

我使用xcode 4.6和最新的sdk。我的问题是:编译器会自动在.h文件中查找“MyClassDelegate”吗?

2 个答案:

答案 0 :(得分:1)

您可以用任何一种方式定义委托实例变量,但第一种方法更好。

第一种方式,编译器会去找协议(你需要导入它定义的.h文件),然后它会检查:

  1. 设置委托的任何地方,正在设置的实例实现协议
  2. 你使用委托的任何地方,你正在调用一个已知的方法
  3. 第二种方式,编译器不进行检查,并将所有内容留给运行时。

    协议不需要在具有特定名称的文件中定义,只需要在尝试使用它的文件中定义,或者在其中定义的文件需要#import

答案 1 :(得分:1)

您可以使用协议进行正式授权(第1版),不使用协议进行非正式授权(第2版)。两者在语法上都是正确的。