Objective-C中的实例变量的协议如何工作?

时间:2009-03-20 03:23:40

标签: objective-c

我看到了很多代码,例如以下内容:

id<foo> aBar;

通常这是我在类声明中看到的内容,例如:

@interface bar : UIViewController <UITableViewDelegate, UITableViewDataSource>

上述是否意味着aBar可能是类bar的实例并且承诺拥有foo协议中声明的所有方法?

2 个答案:

答案 0 :(得分:16)

关闭。这意味着aBar将是符合协议foo的类的实例。它可以是bar(如果该类符合foo)或其他符合foo的类。您从该声明中得知的是aBar符合协议。

此外,这些只在编译时检查,而不是运行时。可以在aBar中放置一个不符合foo类的实例的对象。但是编译器会在大多数情况下警告你。

答案 1 :(得分:0)

完全。协议意味着您不继承该类,但获取该类的方法原型。这样,当您尝试与需要这些方法的对象进行交互时,您将知道方法存根是什么。想想C#中的浅层接口。

我说C#因为那是我的主要语言。 :)