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

 

基础数据结构

 

 

posted @ 2020-04-16 21:23  Justin_mr  阅读(144)  评论(0编辑  收藏  举报