3.isa

作者: CC同学_HelloCC | 来源:发表于2020-09-11 23:12 被阅读0次
    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;
    };
    

    相关文章

      网友评论

          本文标题:3.isa

          本文链接:https://www.haomeiwen.com/subject/rzqiektx.html