开发者社区> 问答> 正文

7、消息转发机制,消息转发机制和其他语言的消息机制优劣对比

7、消息转发机制,消息转发机制和其他语言的消息机制优劣对比

展开
收起
游客bnlxddh3fwntw 2020-04-13 15:13:16 1637 0
1 条回答
写回答
取消 提交回答
  • 消息转发机制:当接收者收到消息后,无法处理该消息时(即:找不到调用的方法SEL),就会启动消息转发机制,流程如下:

    第一阶段:咨询接收者,询问它是否可以动态增加这个方法实现

    第二阶段:在第一阶段中,接收者无法动态增加这个方法实现,那么系统将询问是否有其他对象可能执行该方法,如果可以,系统将转发给这个对象处理。

    第三阶段:在第二阶段中,如果没有其他对象可以处理,那么系统将该消息相关的细节封装成NSInvocation对象,再给接收者最后一次机会,如果这里仍然无法处理,接收者将收到doesNotRecognizeSelector方法调用,此时程序将crash。

    具体方法如下:

    // 第一阶段 咨询接收者是否可以动态添加方法
    + (BOOL)resolveInstanceMethod:(SEL)selector
    + (BOOL)resolveClassMethod:(SEL)selector //处理的是类方法
    
    // 第二阶段:询问是否有其他对象可以处理
    - (id)forwardingTargetForSelector:(SEL)selector
    
    // 第三阶段
    - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
    - (void)forwardInvocation:(NSInvocation *)invocation
    
    2020-04-13 15:13:49
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
消息队列 Kafka 版差异化特性 立即下载
fibjs 模块重构从回调到协程 立即下载
低代码开发师(初级)实战教程 立即下载