1.
這是id的定義,它就是一個指針,它可以指向的類型不僅局限于NSObject,
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
2.NSObject *就是NSObject類型的指針,它的范圍小。
3.id<NSObject>是指針,它要求它指向的類型要實現NSObject protocol。但他和NSObject不是一個東西。
而NSObject類實現了NSObject接口,所以id<NSObject>的對象。
NSObject實現類似這樣:
@interface <NSObject>{
Class isa;
}
…
如果我們來看看NSProxy的定義,你會發現,它不是繼承自NSObject,但是卻實現了NSObjecct接口,
NSProxy定義類似這樣:
@interface NSProxy<NSObject>{
Class isa;
}
…
所以id可以指向NSProxy的對象。