Runtime
2020-05-11 本文已影响0人
CoderHong
OC中的id类型
id的类型定义
typedef struct objc_object *id
struct objc_object在runtime中定义
struct objc_object {
Class isa;
};
NSObject底层的数据结构体
struct NSObject_IMPL {
Class isa;
};
Foundation框架中自定义的类基本继承NSObjec 因此实例对象第一个成员都是isa指针 这样就可以通过struct objc_object *类型指针指向继承NSObject类的实例对象访问isa 这样是内存安全的
OC中的Class类型
Class类型定义
typedef struct objc_class *Class;
Class类型是指向struct objc_class类型的指针
struct objc_class在Runtime源码定义
struct objc_class : objc_object {
Class superclass;
cache_t cache;
class_data_bits_t bits;
class_rw_t *data() const {
return bits.data();
}
}
所谓的类对象、元类对象的底层结构都是struct objc_class