Runtime相关基础知识
$[timeformat('2021-10-08T10:53:53+08:00')]

数据结构

objc_object

id ==》 objc_object 结构体

  • 继承自 objc_class
  • isa指针指向 objc_class
  • 实例对象的isa指针指向类对象;类对象isa指针 指向元类

结构作用

  • isa_t
  • isa相关操作
  • 弱引用相关
  • 关联对象相关
  • 内存管理相关

objc_class

Class == objc_class objc_class 继承自 objc_object

  • superClass superClass 指向一个 Class
  • cache_t 方法缓存 cache bucket list 里面存的是 key:IMP
  • class_data_bits_t bits 类的变量/属性/方法

isa指针

共用体 isa_t

  1. 指针型isa:isa的值代表Class的地址
  2. 非指针型isa:isa的值的部分代表Class的地址

实例对象 --->> 类对象Class 类对象 -->> 元类

cache_t

  • 快速查询方法查询
  • 可增量扩展的哈希结构
  • 局部性原理的最佳应用
Bucket_t Bucket_t Bucket_t Bucket_t
  • bucket_t: key : IMP

class_data_bits_t

class_data_bits_t 是 class_rw_t class_rw_t 类的属性 协议 read-write class_ro_t read-only 只读信息

class_rw_rt

  • class_ro_t
    • name 类名
    • ivars 成员变量 一维数组 里面是 method_t 只读
    • propertyes 属性 一维数组 只读
    • protocols 协议 一维数组 只读
    • methodList 一维数组 只读
  • protocols list_array_tt 二维数组 可写
  • propertyes list_array_tt 二维数组 可写
  • methods list_array_tt 二维数组 里面是 method_t 可写

函数四要素:

  • 函数名称
  • 函数返回值
  • 函数参数
  • 函数体

method_t

  • SEL name 函数名
  • const char* types 传参 和 返回值
  • IMP imp 函数体

Types encodings 请参考

const char* types

返回值 参数1 参数2 参数n

-(void)aMethod; <===> v@:

V @ :
void id(消息接收者 self) SEL

整体数据结构

整体数据结构
整体数据结构

对象 类对象 元类

  • 类对象 : 存储实例方法列表等信息

  • 元类对象 : 存储类方法列表等信息