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