id <protocol>和NSObject <protocol> </protocol> </protocol>之间的区别

时间:2013-12-13 13:08:13

标签: objective-c delegates

在Objective-C中,id<protocol> or NSObject<protocol>经常用于委托声明。

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

1 个答案:

答案 0 :(得分:9)

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

NSObject<protocol> *obj

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

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

id y = [obj copy];

在第一种情况下会产生编译错误。

第二个声明还暗示obj符合NSObject 协议。 但是,如果<protocol>来自NSObject协议,则没有区别:

@protocol protocol <NSObject>