iOS中id与NSObject * 和id<NSObject>的区别

818 阅读1分钟

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的对象。