Objective c 当我返回指向协议的指针时,为什么会出现编译错误? @协议可运行 -(id)工程//这很好 -(可运行*)已损坏;//获取一个编译错误,在“Runnable”之前写为“Expected”) @结束

Objective c 当我返回指向协议的指针时,为什么会出现编译错误? @协议可运行 -(id)工程//这很好 -(可运行*)已损坏;//获取一个编译错误,在“Runnable”之前写为“Expected”) @结束,objective-c,xcode,Objective C,Xcode,我不太明白为什么xCode抱怨-(Runnable*)坏了行协议在语法上不像Java中的“接口”,接口指针和子类指针的语法基本相同 id是一种惯用方式,表示“符合Runnable的对象。id是对任何类型对象的引用,符号表示为进行类型检查而明确符合给定协议 如果您说Foo*,那么您指的是类型为Foo或其子类之一的对象 这恰好是Obj-C的语法。使用这种语法,语义与您在Java中得到的类似。Obj-C中的协议在语法上不像Java中的“接口”,接口指针和子类指针的语法基本相同 id是您说“符合Runn

我不太明白为什么xCode抱怨
-(Runnable*)坏了行

协议在语法上不像Java中的“接口”,接口指针和子类指针的语法基本相同

id
是一种惯用方式,表示“符合
Runnable
的对象。
id
是对任何类型对象的引用,
符号表示为进行类型检查而明确符合给定协议

如果您说
Foo*
,那么您指的是类型为
Foo
或其子类之一的对象


这恰好是Obj-C的语法。使用这种语法,语义与您在Java中得到的类似。

Obj-C中的协议在语法上不像Java中的“接口”,接口指针和子类指针的语法基本相同

id
是您说“符合
Runnable
的对象”的惯用方式。
id
是对任何类型对象的引用,
符号表示为进行类型检查而明确符合给定协议

如果您说
Foo*
,那么您指的是类型为
Foo
或其子类之一的对象


这恰好是它的Obj-C语法。使用这种语法,语义与您在Java中得到的类似。

更准确地说,语法不同。它们的功能几乎相同,只是Objective-C没有将符合协议的对象作为该协议的实例来讨论。@Chuck。很好的澄清。答案被调整了。更准确的说法是语法不同。它们的功能几乎相同,只是Objective-C没有将符合协议的对象作为该协议的实例来讨论。@Chuck。很好的澄清。答案变了。
@protocol Runnable

- (id<Runnable>) works; //this compiles fine

- (Runnable *) broke; // get a compile error saying Expected ')' before 'Runnable'

@end