@protocol Runnable
- (id<Runnable>) works; //this compiles fine
- (Runnable *) broke; // get a compile error saying Expected ')' before 'Runnable'
@end
我不确定我理解为什么xCode抱怨- (Runnable *) broke;
行
答案 0 :(得分:5)
Obj-C中的协议在语法上看起来不像Java中的“接口”,其中接口指针和子类指针的语法基本相同。
id<Runnable>
是您说“符合Runnable
的对象的惯用方式。id
是对任何类型对象的引用,并且<
>
表示法表达了对给定协议的明确一致性,以进行类型检查。
如果你说Foo *
,你指的是Foo
类型或其子类之一的对象。
这恰好是Obj-C的语法。使用这种语法,语义类似于你所获得的语义,例如Java的。