runtime相关面试
结构体objc_object就是我们常用的id类型
objc_object包括
isa_t
isa操作相关
弱引用相关
关联对象相关
内存管理相关
objc_class结构体对应我们平常使用的Class
objc_class继承自objc_object
包括
Class superClass;
cache_t cache;//方法缓存
class_data_bits_t bits;//属性 方法
共用体isa_t有2种:
指针型isa 在64系统里,有64位的0或1组成的值
isa的值代表class的地址(64位)
非指针型isa
isa的值的部分代表class的地址(例如33位 44位)
isa的指向
实例的isa指向类对象(调用实例方法实际是通过isa指针在类对象中查找)
类对象的isa指向元类对象(调用类方法实际是通过isa指针在元类对象中查找)
cache_t
快速查找方法执行函数(方法缓存,减少对类的方法列表遍历)
可增量扩展的哈希表结构(类似数组,bucket_t封装的结构体,两个属性:方法选择器的名称key和无类型函数指针IMP)
局部性原理的最佳应用(调用频次高的方法放到缓存,提高命中率)
class_data_bits_t
class_data_bits_t主要是对class_rw_t的封装
class_rw_t(读写)代表了类相关的读写信息(例如分类的属性,方法) 对class_ro_t的封装(read only)
class_ro_t代表类相关的只读信息
class_rw_t包括:
class_ro_t
protocols(继承 list_array_tt 二维数组)
properties(继承 list_array_tt 二维数组)
methods(继承 list_array_tt 二维数组) 例如第一维数组是每个分类 第二维数组是每个分类里面的方法method_t结构体
class_ro_t包括
name
ivars(一维数组)
properties(一维数组)
protocols(一维数组)
methidList(一维数组) 元素是 method_t
结构体 method_t包含
SEL name; 名称
const char *types; 返回值 参数
IMP imp; 函数体
const char *types
基础数据结构