iOS 消息转发

对象收到无法解读的消息时,就会启动消息转发机制

第一个阶段:动态方法解析。

1. 对象在收到无法解读的消息后,首先将调用其所属类下面这个类方法

+(BOOL) resolveInstanceMethod:(SEL)selector; //参数名为那个未知的选择子

也就是再继续往下执行转发机制之前,本类有机会新增一个处理这个选择子的方法。

如果选择子的方法是个类方法,则使用

+(BOOL) resolveClassMethod:(SEL)selector。

2.备援接收着

接收者第二次处理无法解读消息的机会,将消息转给其他接收者来处理

-(id)forwardingTargetForSelector:(SEL)selector

第二个阶段:完整的消息转发。

到了这个一步就要启动完整消息转发机制,首先要创建NSInvocation,把尚未处理的消息的全部细节放进去,触发NSInvocation时,通过消息派发系统,将消息指派给目标对象。

-(void)forwardInvocation:(NSInvocation *)invocation

跟备援接收者 方案所实现的方法等效。实现方法时,若发现某调用操作不应由本类处理,则需要调用超类的同名方法。所以继承体系中每个类都有机会处理此调用请求。直到NSObject, 最后还会调用

doesNotRecognizeSelector:  以抛出异常。表明消息最终没有被处理。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 消息转发(Message Forwarding)是在查找 IMP 失败后执行一系列转发流程的慢速通道,如果不作转发...
    二猪哥阅读 3,902评论 0 7
  • 前言我们在开发过程中,可能遇到服务端返回数据中有null的情况,当取到null值,并且对null发送消息的时候,就...
    Lucky_Man阅读 820评论 0 2
  • 级别: ★★☆☆☆标签:「iOS」「消息转发」「null([NSNull null])」作者: WYW[http...
    QiShare阅读 3,995评论 1 27
  • 相信大家对消息转发机制都不陌生,或许没有使用过,但耳濡目染也听了不少object-c消息转发,动态解析等神奇的功能...
    coco_CC阅读 222评论 0 1
  • 当我们像一个对象发送消息[Receiver message],Receiver没有实现该消息,即[Receiver...
    AlvinCrash阅读 872评论 1 5