在Objective-C中,
id和NSObject之间的主要区别是什么? 何时使用其中之一而不是另一个?
id<protocol>
或NSObject<protocol>
经常用于委托声明。id和NSObject之间的主要区别是什么? 何时使用其中之一而不是另一个?
id<protocol>
或NSObject<protocol>
经常用于委托声明。id<protocol> obj
是符合指定协议的任何对象的声明。
您可以向该对象发送来自给定协议(或从继承自<protocol>的协议)的任何消息。
NSObject<protocol> * obj
是符合给定协议且派生自NSObject
的任何对象的声明。
NSObject
类的任何方法,例如id y = [obj copy];
在第一种情况下,这将导致编译错误。
第二个声明还意味着 obj
符合 NSObject
协议。
但如果 <protocol>
派生自 NSObject 协议,则没有任何区别:
@protocol protocol <NSObject>
id<protocol> obj
和NSObject<protocol> *obj
都意味着对象符合NSObject协议。也许我应该从答案中删除最后一部分,这只会让它更加混乱。 - Martin R
id
vsNSObject *
”和“id<protocol>
vsNSObject<protocol> *
”是完全不同的问题。请投票重新开放。 - Martin R