Runtime

作者: CoderHong | 来源:发表于2020-05-11 09:41 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Runtime

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