2013-12-13 52 views
6

在Objective-C中,id<protocol> or NSObject<protocol>经常用于委托声明。id <protocol>与NSObject之间的区别<protocol>

id和NSObject之间的主要区别是什么? 你想什么时候使用其中一种?

+0

有用http://stackoverflow.com/questions/466777/whats-the-difference-between-declaring-a-variable-id-和“nobject” – Maulik

+2

这不是重复的,因为“id”与“NSObject *”“和”id vs NSObject *“”是明显不同的问题。投票重新开放。 –

+0

马丁是对的,这是不一样的。 – Boon

回答

8

id<protocol> obj是任何符合指定协议的对象的声明。 您可以将给定协议的任何消息发送给对象(或从<protocol>继承的协议 )。

NSObject<protocol> *obj是该

  • 符合给定的协议的任何对象的声明,和
  • NSObject的。

这意味着,在第二种情况下,可以发送从所述 类NSObject任何方法的对象,例如

id y = [obj copy]; 

这将使一个编译错误在第一种情况。

第二个声明还意味着obj符合NSObject协议。 但这没有什么区别如果<protocol>从NSObject的协议导出:

@protocol protocol <NSObject> 
+0

谢谢马丁。因此,如果协议是从派生的,那么id 在功能上与NSObject 相同? – Boon

+0

@Boon:号码*“这没什么区别”*仅适用于答案的最后部分,idobj和NSObject * obj意味着该对象符合NSObject协议。 - 也许我应该从答案中删除最后一部分,这使得它更容易混淆。 –

+0

明白了,谢谢。 – Boon

相关问题