id与NSObject* 和id的区别

1. 我们来看看id的定义,它就是一个指针,它可以指向的类型不仅限于NSObject

[代码]c#/cpp/oc代码:

typedef struct objc_class *Class; 
typedef struct objc_object { 
    Class isa; 
} *id; 


2. NSObject*就是 NSObject类型的指针了,它范围较小。

3. id<NSObject>是指针,它要求它指向的类型要实现NSObject protocol,
iOS中很多类定义很奇葩,类名叫NSObject,定义个接口也叫NSObject,但是它俩不是一个东东。

而NSObject类实现了NSOject接口,所以id<NSObject>可以指向NSObject的对象。
NSObject实现类似这样:

[代码]c#/cpp/oc代码:

@interface NSObject <NSObject> { 
    Class isa; 
} 
…



如果我们来看看NSProxy的定义,你会发现,它不是继承自NSObject,但是却实现了NSObjecct接口,
NSProxy定义类似这样:

[代码]c#/cpp/oc代码:

@interface NSProxy <NSObject> {
    Class	isa;
}
…


所以id<NSObject>可以指向NSProxy的对象。

文章转载自http://www.devdiv.com/ios_id_nsobject_id_lt_nsobject_gt_-blog-1-50764.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章