OC 类结构分析

366 阅读1分钟

对象、类、元类、父类 的关系图

isa流程图.png

总结:

  • 对象的指针不指向父类
  • 元类的指针指向根元类
  • 根元类的指针自己
  • 根元类的父类指向根类(NSObject)
  • 根元类是唯一的(NSObject),类对象在内存中也是唯一的,地址唯一
  • 实例对象没有父类

类结构分析

截屏2021-05-29 上午11.27.36.png

struct objc_object { isa_t isa; //指针 }

struct objc_class ( // 继承 objc_object 一个指针 isa class superclass; cache_t cache; class_data_bits bits; class_rw_t *data() const{ return bits.data(); }; }

objc_class 继承 objc_object,故:每个类对象都有 isa 指针,父类,cache,bits等

class_data_bits bits

截屏2021-05-29 上午11.27.26.png

我们可以通过内存偏移找到起始地址,isa 指针 8字节,superclass 8字节,cache_t 占 16字节,所以 class_data_bits在结构体中的内存便宜是32字节

class_data_bits 内部包含 class_rw_t.class_rw_t内部存放存放类的属性列表 方法列表 协议列表

cache_t

cache_t中存放的是方法,当调用方法时先在cache_t中查询是否有方法,如果没有再去 method_list 中查找方法,找到之后 在存储到cache_t中。

image.png