如果我执行以下操作,编译器不会抱怨:
id foo;
[foo retain];
但是,如果我执行以下操作,编译器会抱怨:
id<NSCopying> bar;
[bar retain];
具体来说,它说:
Instance method '-retain' not found (return type defaults to 'id')
为什么是这样?我认为 anid
指向一个通用的 Objective-C 对象,并且我可以传递retain
给任何 Objective-C 对象。
请注意,这是一个警告,而不是错误,所以我仍然可以编译代码并且它似乎可以工作。我还注意到我可以执行以下操作来抑制警告:
[(id)bar retain];
但我认为id<NSCopying>
是 的一个子类型id
,所以任何可以在 anid
上完成的事情都可以在id <NSCopying>
...