ios消息转发机制

      当一个对象收到无法解读的消息后会如何处理,也就是说对象无法响应选择子(方法),这时就要进入到消息转发机制的流程。

      我们经过会在程序崩溃的时候看到这样的提示:**** unrecognized selector sent to instance 表明你曾向某个对象发送了一条无法解读的消息。

      下面将简述一下消息转发机制的流程。

      1.查找接收者所属的类,看其是否能动态添加方法,以处理这个“未知的方法”。(动态方法解析)

      +(BOOL) resolveInstanceMethod:(SEL)selector

      2.运行期系统把消息转给其他接收者处理。(备援接收者)

      -(id)forwardingTargetForSelector:(SEL)selector

      3.经过上述两步后,如果还是没有办法处理选择子,就启动完成的消息转发。创建NSInvocation对象,把与尚未处理的那条消息有关的全部细节都封于其中。此对象包含选择子、目标target及参数。在触发NSInvocation对象时,消息派发系统会把消息指派给目标对象。

       -(void)forwardInvocation:(NSInvocation *)invocation

tips:接收者在每一步都有机会处理消息。步骤越往后,处理消息的代价越大。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容