iOS消息转发的三次拯救

本文介绍了iOS中消息转发机制的三个阶段:动态方法解析、备援接收者和完整的消息转发,详细阐述了每个阶段的目的和实现方法,帮助开发者理解如何处理未知消息并模拟多重继承。
摘要由CSDN通过智能技术生成

理解消息转发机制

在编译期间向类发送了其无法解读的消息并不会报错,因为在运行期可以继续向类中添加方法,所以编译期在编译时还无法通知类中到底会不会有某个方法实现。当对象接收到无法解读的消息后,就会启动“消息转发”机制,程序猿可以在此过程告诉对象应该如何处理消息。
如果我们向某个对象发送了一条无法解读的消息,报错是这样的。

unrecognized selector sent to instance

消息转发分为俩大阶段。第一阶段先找到接收者,所属的类,看其是否能动态添加方法,以处理当前这个未知的选择子,这个过程叫动态方法解析。
第二阶段是完整的消息转发机制。如果运行期系统已经把第一阶段执行完了,那么接收者自己就无法再以动态新增方法的手段来响应该选择子的消息。此时运行期系统会请求接收者以其他手段来处理与消息相关的方法调用。这里又分为俩小步。首先请接收者看看其他对象能不能处理这条消息。若有,则runtime讲消息转发给那个对象,于是消息转发过程结束。若没有备用的接收者,则启动完整的消息转发机制,runtime会把与消息有关的全部细节封装到NSInvocation对象中,再给接收者最后的机会,令其设法解决当前未处理的消息。
以上的三种方法,被称为消息的三次拯救。

第一次拯救-动态方法解析

对象在收到无法解读的消息后,首先调用其所属类的下列方法:

  • (BOOL)resolveInstanceMethod:(SEL)selector
    该方法的参数就是那个未知的选择子,其返回值为Boolean类型,表示这个类能否新增一个实例方法用以处理此选择子。在继续往下执行转发机制之前,本类有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值