说明
runtime核心:lookUpImpOrForword
调用方法本质是消息查找 objc_msgSend imp
底层调用:objc_msgSend(t,test);
查找类
根据isa查找类对象,isa_t为结构体,通过当中的ISA_MASK和掩码的位运算找到类的地址信息
查找方法
查找缓存方法
1.objc_class结构体中的cache_t(方法缓存),地址偏移计算出 buckets->sel&_mask=index(hash表中的索引)->_buckets+(sel&mask)->imp->sel->缓存命中
查找方法(objc_msgSend_uncached)
1.遍历方法列表(mothod_t)
2.继承链当中superClass遍历查找
3.若直至NSObject仍无遍历出方法进入动态方法解析
动态方法解析(本质就是提供机会)
1.resloveIntancesMethod,修正自身错误,动态的添加一个方法,方法列表当中(SEL-IMP)建立新的绑定关系,IMP需自己设定并处理未找到方法的情况
标准消息转发(obj_msgForword)
1.forwordTargetForSelector 寻找接收者
2.forwordInvocation 直接舍弃