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的对象。
网友评论