- 我们来看看id的定义,它就是一个指针,它可以指向的类型不仅限于NSObject
[代码]c#/cpp/oc代码:
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
NSObject*就是 NSObject类型的指针了,它范围较小。
id是指针,它要求它指向的类型要实现NSObject protocol,
iOS中很多类定义很奇葩,类名叫NSObject,定义个接口也叫NSObject,但是它俩不是一个东东。
而NSObject类实现了NSOject接口,所以id可以指向NSObject的对象。
NSObject实现类似这样:
[代码]c#/cpp/oc代码:
@interface NSObject <NSObject> {
Class isa;
}
…
如果我们来看看NSProxy的定义,你会发现,它不是继承自NSObject,但是却实现了NSObjecct接口,
NSProxy定义类似这样:
[代码]c#/cpp/oc代码:
@interface NSProxy <NSObject> {
Class isa;
}
…
所以id可以指向NSProxy的对象。
此处为原网址,复制在博客以便日后复习