Runtime相关基础知识
数据结构
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
- 指针型isa:isa的值代表Class的地址
- 非指针型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 函数体
const char* types
返回值 | 参数1 | 参数2 | 参数n |
---|
-(void)aMethod; <===> v@:
V | @ | : |
---|---|---|
void | id(消息接收者 self) | SEL |
整体数据结构
对象 类对象 元类
-
类对象 : 存储实例方法列表等信息
-
元类对象 : 存储类方法列表等信息