iOS 消息转发
2021-10-22 本文已影响0人
你飞跃俊杰
消息转发机制
消息转发.png1.动态方法解析
首先是征询接收者所属的类,看其是否能动态添加调用的方法,来处理当前这个未知的选择子;
2.快速消息转发
寻找是否在其他对象内有该方法实现,并将该消息转发给这个对象.如果目标对象实现了该方法,Runtime这时就会调用这个方法,给你把这个消息转发给其他对象的机会.只要这个方法返回的不是nil和self,整个消息发送的过程就会被重启,当然返回的对象会变成return的对象,否则就会继续nurmal fowarding
3.标准消息转发
获取方法签名
如果失败就抛异常,如果成功了,并获取参数和返回值,就会创建invocation 对象,并将forworadinvocation消息转发给该对象
消息转发源码
13.0后检查参数开关,关不了
image.png
发送消息
强转一下
image.png
给父类发消息
image.png
汇编发送消息
image.png
符号断点
image.png image.png
汇编代码
image.png
底层用汇编:调用频繁,汇编性能高,safe
查找消息转发的方法
image.png image.png手机,M1:arm64,模拟器:i386,x84_64 电脑
image.png image.png image.png image.png找到了方法
image.png这里也有
image.png
这样也可以找
image.png
慢速查找
image.png