struct objc_class : objc_object {
// Class ISA; //隐性存在(继承而来)的isa 占8个字节
Class superclass; //父类对象地址 占8个字节
cache_t cache; //是结构体,16个字节而不是8个字节 // pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() {
return bits.data();
}
//省略其他
}
-
cache_t 相当于缓存, 它要根据自身结构体所容纳的空间大小(如下图红框部分)来决定其所占字节数。(另外,cache_t是结构体,不是结构体指针.Class为结构体指针,所占字节为8)
cache_t结构体.png
bits相当于值
struct objc_class : objc_object {
// Class ISA; // 8
Class superclass; // 8
cache_t cache; // 16 不是8 // formerly cache pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() {
return bits.data();
}
//......其他的省略
}
代码论证
-
属性:存在于class里,在rw中,存在于property中(且会生成一个带下划线的ivar,即_ivar),并且存在于bits中.
-
成员:变量存在于ivar中
-
对象方法:存在于类中,
-
类方法:存在于元类中,要用类去查找——>元类,看元类中是否有这个实例方法
-
对象存在类中是对象方法
-
类方法存在元类中类似于实例方法
网友评论