5、实例方法和类方法的存储cache_t

144 阅读1分钟

cache在objc_object里面的位置:

image.png

cache_t的内部结构

image.png

cache_t存储方法的方法:

image.png SEL 方法名 IMP方法实现 id receiver 为方法实现

存储的位置是buckets

image.png

bucket定义了存储的类型

image.png

方法的存储规则

  • 如果已经存储过方法,并且方法实现一样则返回方法实现
  • 如果已经存储过,方法实现不一样则,方法在bucket中的位置+1,也就是存储到下一个位置
  • 如果没存储过,则存储该方法

image.png

存储方法

image.png

- 默认cache_t缓存两个方法

  • 1、responseSelector
  • 2、class

如果再调用第三个方法就会扩容,扩容规则:

1、初始化大小根据平台不一样,x86_64 是4 arm64 是2 2、x86_64架构下,缓存的大小(默认+1)等于筒子长度的3/4时进行2倍扩容 3、arm64架构下,缓存的大小大于筒子长度7/8时进行2倍扩容,默认长度为8时不进行扩容,指导装满 4、扩容之后旧的筒子会直接释放掉