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;
};
上一篇下一篇

猜你喜欢

热点阅读