Runtime

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。