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

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