3.isa
2020-09-11 本文已影响0人
CC同学_HelloCC
isa流程图.png
isa指向 ->
实例isa -> 类|类isa -> 元类 | 元类isa -> 根元类|根元类isa -> 根元类isa
一切都继承( --> ) 根类 NSObject
子类 --> 父类 --> 根类
子元类 --> 父元类 --> 根元类 --> 根类
如下 Class 的源代码
bits 存储的是类属性与方法
可以通过 Class 的 isa 加 32 字符获取 bits
typedef struct objc_class *Class;
struct objc_class : objc_object {
// Class ISA; // 8 字符
Class superclass; // 8 字符
cache_t cache; // 16 字符 // formerly cache pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() const {
return bits.data();
}
void setData(class_rw_t *newData) {
bits.setData(newData);
}
void setInfo(uint32_t set) {
ASSERT(isFuture() || isRealized());
data()->setFlags(set);
}
... 后面都是方法
}
如下objc_object源码
typedef struct objc_object *id;
/// Represents an instance of a class.
struct objc_object {
Class _Nonnull isa OBJC_ISA_AVAILABILITY;
};