二、方法的本质是什么
方法的本质是发送消息objc_msgSend
,即寻找IMP
的过程
发送消息会有以下⼏个流程:
- 快速查找流程——通过汇编
objc_msgSend
查找缓存cache_t
是否有imp实现 - 慢速查找流程——通过C++中
lookUpImpOrForward
递归查找当前类和父类的rw
中methodlist
的方法 - 动态方法解析——通过调用
resolveInstanceMethod
和resolveClassMethod
来动态方法决议——实现消息动态处理 - 快速转发流程——通过
CoreFoundation
来触发消息转发流程,forwardingTargetForSelector
实现快速转发,由其他对象来实现处理方法 - 慢速转发流程——先调用
methodSignatureForSelector
获取到方法的签名,生成对应的invocation
;再通过forwardInvocation
来进行处理 - 以上流程均无法挽救就崩溃并报错