id:
它就是一个指针,它可以指向的类型不仅限于NSObject
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
NSObject *:
NSObject * 就是 NSObject类型的指针了,它范围较小。
id<NSObject>
它也是一个是指针,它要求它指向的类型要实现NSObject protocol
- iOS中很多类定义很奇葩,类名叫NSObject,定义个接口也叫NSObject,但是它俩不是同样的一个东西
- 而NSObject类实现了NSOject接口,所以id<NSObject>可以指向NSObject的对象。
@interface NSObject <NSObject> {
Class isa;
}
- 如果我们来看看NSProxy的定义,你会发现,它不是继承自NSObject,但是却实现了NSObjecct接口,
NSProxy定义类似这样:
@interface NSProxy <NSObject> {
Class isa;
}