美文网首页
消息转发流程

消息转发流程

作者: RunningTeemo | 来源:发表于2018-11-01 10:56 被阅读0次

一.消息转发流程

当向Objective-C对象发送一个消息,但runtime在当前类及父类中找不到此selector对应的方法时,消息转发(message forwarding)流程开始启动。

  1. 动态方法解析(Dynamic Method Resolution或Lazy method resolution)
    向当前类(Class)发送resolveInstanceMethod:(对于类方法则为resolveClassMethod:)消息,如果返回YES,则系统认为请求的方法已经加入到了,则会重新发送消息。
  2. 快速转发路径(Fast forwarding path)
    若果当前target实现了forwardingTargetForSelector:方法,则调用此方法。如果此方法返回除nil和self的其他对象,则向返回对象重新发送消息。
  3. 慢速转发路径(Normal forwarding path)
    首先runtime发送methodSignatureForSelector:消息查看Selector对应的方法签名,即参数与返回值的类型信息。如果有方法签名返回,runtime则根据方法签名创建描述该消息的NSInvocation,向当前对象发送forwardInvocation:消息,以创建的NSInvocation对象作为参数;若methodSignatureForSelector:无方法签名返回,则向当前对象发送doesNotRecognizeSelector:消息,程序抛出异常退出。

相关文章

  • 消息转发流程

    一.消息转发流程 当向Objective-C对象发送一个消息,但runtime在当前类及父类中找不到此select...

  • 消息转发流程

    实例方法的流程 对象实例收到消息(SEL+参数) 根据存储在对象实例中的ISA到类对象,类对象依次查找Class ...

  • 消息转发流程

    消息转发机制 消息的查找流程分为:快速查找和慢速查找消息转发机制也分为:快速和慢速先来一个转发流程图 之前我们的消...

  • 消息转发流程

    1. 动态方法解析 voidsendMessage(idself,SEL_cmd,NSString*msg){ ...

  • 消息转发流程

    动态方法解析 备用接收者 完整消息转发

  • 消息转发流程

    iOS开发过程中我们经常会碰到这样的报错:unrecognized selector sent to instan...

  • 消息机制

    消息发送 objc_msgSend流程 动态方法解析流程 消息转发流程

  • ios 消息转发

    ios在类中,没有定义的函数,要走消息转发流程。如果不走消息转发流程,程序会奔溃。消息转发流程分四步调用。 第一步...

  • iOS开发之进阶篇(9)—— runtime运行时

    目录 前言 iOS编译流程 runtime介绍 消息发送流程 消息转发流程 Method Swizzling 参考...

  • Effective Objective-C读后笔记(2)

    11、runtime消息转发机制 runtime的消息转发流程图消息转发 消息转发的示例实现 这里也给大家推荐一篇...

网友评论

      本文标题:消息转发流程

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