我看到了很多代码,例如以下内容:
id<foo> aBar;
通常这是我在类声明中看到的内容,例如:
@interface bar : UIViewController <UITableViewDelegate, UITableViewDataSource>
上述是否意味着aBar可能是类bar的实例并且承诺拥有foo协议中声明的所有方法?
答案 0 :(得分:16)
关闭。这意味着aBar
将是符合协议foo
的类的实例。它可以是bar
(如果该类符合foo
)或其他符合foo
的类。您从该声明中得知的是aBar
符合协议。
此外,这些只在编译时检查,而不是运行时。可以在aBar
中放置一个不符合foo
类的实例的对象。但是编译器会在大多数情况下警告你。
答案 1 :(得分:0)
完全。协议意味着您不继承该类,但获取该类的方法原型。这样,当您尝试与需要这些方法的对象进行交互时,您将知道方法存根是什么。想想C#中的浅层接口。
我说C#因为那是我的主要语言。 :)