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

Coo*_*coa 5 objective-c

我最近看到了很多代码如下:

id<foo> aBar;
Run Code Online (Sandbox Code Playgroud)

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

@interface bar : UIViewController <UITableViewDelegate, UITableViewDataSource>
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*sey 16

关.这意味着aBar它将是符合协议的类的实例foo.它可能是bar(如果该类符合foo)或另一个符合的类foo.您从该声明中得到的所有信息都aBar符合协议.

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