在IOS的SDK头文件中,能看到一些定义,在objc.h中,可以看到id的定义如下
typedef struct objc_class *Class
typedef struct objc_class{
Class isa;
}*id;
在NSObject.h中,可以看到NSObject类的定义如下
@interface NSObject<NSObject>{
Class isa
}
+ (void)load;
+ (void)initialize;
....
两个类型都包含有Class isa,但NSObject同时包含了一些其他的方法,并需要实现NSObject协议。
所以NSObject *可以用id来表示。但id不能用NSObject *来表示