美文网首页
消息转发机制

消息转发机制

作者: CS_SDN | 来源:发表于2020-01-02 00:12 被阅读0次
  • OC由于运行时特性,可以在运行期间动态添加方法,这个寻找动态添加的方法的过程就是动态消息转发。
  • iOS的消息转发机制分为三个步骤:动态方法解析、快速消息转发机制、标准消息转发机制

1.动态方法解析

对象在无法解读消息会首先调用所属类的下列类方法:

+ (BOOL) resolveInstanceMethod:(SEL)selector

2.快速消息转发

寻找是否在其他对象内有该方法实现,并将该消息转发给这个对象

-(id)forwardingTargetForSelector:(SEL)selector

如果目标对象实现了该方法,Runtime这时就会调用这个方法,给你把这个消息转发给其他对象的机会.只要这个方法返回的不是nil和self,整个消息发送的过程就会被重启,当然返回的对象会变成return的对象,否则就会继续nurmal fowarding

3.标准消息转发(normal forwarding)

这一步是消息转发的最后一步,首先会发送

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector 

消息获得函数的参数和返回值,如果返回nil,runtime则会发出doesNotRecognizeSelector消息,然后crash,若是返回了一个函数签名,runtime就会创建一个NSInvocation对象并发送

- (void)forwardInvocation:(NSInvocation *)Invocation 

消息给目标对象

总结:

  1. objc_msgSend在进行MethodTableLookup常规查找 imp 缓存
  2. 如果缓存没有找到imp,则进行慢速递归
  3. 慢速递归如果也没有找到,则意味着即将奔溃,即无imp

如上情况继续分析:

  1. 是否有特殊处理,如果有:对底层动态进行决议和解析
  2. 如果没有特殊处理,有没有交给别人处理
  3. 如果没有交给别人去处理,意味着这些方法你不想处理,但是任要实现
    1.methodSignatureForSelector(),进行方法签名,把方法丢出去
    2.forwardInvocation()来对消息处理


    消息转发流程图

相关文章

  • Runtime

    相关简单介绍 消息机制消息传递机制消息转发机制-动态添加方法消息转发机制-快速转发消息转发机制-慢速转发消息转发机...

  • runtime系列文章总结

    《iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)》《消息转发机制与Aspects源码解析》《...

  • iOS消息转发机制

    消息转发机制: 消息转发机制是相对于消息传递机制而言的。 1、消息(传递)机制 RunTime简称运行时。就是系统...

  • 《Effective Objective-C 2.0 》 阅读笔

    第12条:理解消息转发机制 1. 消息转发机制 当对象接收到无法解读的消息后,就会启动“消息转发”机制,开发者可经...

  • (十二) [OC高效系列]消息的派发机制

    1.什么是消息转发机制 消息转发机制是在调用未知方法时出现的 消息转发机制让程序员有机会去处理未知方法 消息转发机...

  • 消息转发机制(动态消息转发)

    例子分析 1)在给程序添加消息转发功能以前,必须覆盖两个方法,即methodSignatureForSelecto...

  • 深入理解Object-C消息转发机制

    深入理解Object-C消息转发机制 深入理解Object-C消息转发机制

  • 消息发送机制&消息转发机制

    消息发送机制&消息转发机制 消息发送机制:使用了运行时的方式, 通过SEL快速查找IMP的过程. 消息转发机制:I...

  • 消息转发机制

    为什么说 OC 的动态的 严格来说iOS中不存在方法调用的说法,应该说是消息的传递。消息传递和函数调用的区别就是,...

  • 消息转发机制

    前言 在上一篇Runtime源码 方法调用的过程中我们了解了消息的响应过程,即 先缓存查找,若未找到 接下来查找本...

网友评论

      本文标题:消息转发机制

      本文链接:https://www.haomeiwen.com/subject/bihnoctx.html