原文地址:http://www.devdiv.com/ios_id_nsobject_id_lt_nsobject_gt_-blog-1-50764.html
1. 我们来看看id的定义,它就是一个指针,它可以指向的类型不仅限于NSObject
[代码]c#/cpp/oc代码:
1 | typedef struct objc_class *Class; |
2 | typedef struct objc_object { |
2. NSObject*就是 NSObject类型的指针了,它范围较小。
3. id<NSObject>是指针,它要求它指向的类型要实现NSObject protocol,
iOS中很多类定义很奇葩,类名叫NSObject,定义个接口也叫NSObject,但是它俩不是一个东东。
而NSObject类实现了NSOject接口,所以id<NSObject>可以指向NSObject的对象。
NSObject实现类似这样:
[代码]c#/cpp/oc代码:
1 | @ interface NSObject <NSObject> { |
如果我们来看看NSProxy的定义,你会发现,它不是继承自NSObject,但是却实现了NSObjecct接口,
NSProxy定义类似这样:
[代码]c#/cpp/oc代码:
1 | @ interface NSProxy <NSObject> { |
所以id<NSObject>可以指向NSProxy的对象。