美文网首页
iOS底层原理 11 : 消息转发机制

iOS底层原理 11 : 消息转发机制

作者: smooth_lgh | 来源:发表于2020-09-24 16:36 被阅读0次

前言: 在慢速查找流程中,如果最后都没有找到这个imp,那么会进入动态方法决议resolveMethod_locked(),那么接下来会到哪里呢?

我们经常会看到这样一张图:


消息转发流程.jpg

那么就是这样一个流程,底层代码具体是怎样实现的呢:

在我们不知道怎么办的时候,我们可以查看堆栈。

我们看到在执行doesNotRecognizedSelector之前,执行__forwarding_prep_0______forwarding___

查看堆栈.png
那么接下我们要去寻找__forwarding_prep_0______forwarding___,我们下载CoreFoundation开源了的代码里面查找,发现找不到。

接下来通过image list指令查看所有的编译文件
我们找到CoreFoundation的编译文件路径:/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation

image list.png

接下来我们通过hopper软件对这个CoreFoundation编译文件进行反汇编

__forwarding_prep_0___.png
___forwarding___的伪代码里面,我们看到:
  • 先找forwardingTargetForSelector,
  • 如果找到forwardingTargetForSelector,消息转发
  • 如果没有找到forwardingTargetForSelector,就会找methodSignatureForSelector
  • 如果没有找到methodSignatureForSelector,直接unrecognized selector
  • 如果找到methodSignatureForSelector,会继续寻找forwardInvocation,
  • 如果没有找到forwardInvocation,直接unrecognized selector
  • 如果找到forwardInvocation,消息转发。
___forwarding___.png

相关文章

  • iOS底层原理 11 : 消息转发机制

    前言: 在慢速查找流程中,如果最后都没有找到这个imp,那么会进入动态方法决议resolveMethod_lock...

  • iOS底层原理:消息转发机制

    在 iOS底层原理:objc_msgSend之缓存查找[https://www.jianshu.com/p/195...

  • iOS 底层原理 - 消息转发

    在上一篇 iOS 底层原理 - 消息查找流程中,我们知道OC消息机制分为三个阶段,消息发送,动态解析和消息转发,如...

  • iOS 消息转发机制

    今天大概学习了下iOS的消息转发机制,还是挺有收获,在此做下笔记,以便后面温习。 1.iOS的消息转发机制原理如下...

  • runtime系列文章总结

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

  • iOS理解Objective-C中消息转发机制附Demo

    iOS理解Objective-C中消息转发机制附Demo iOS理解Objective-C中消息转发机制附Demo

  • runtime源码之obj_msgsend

    现在大部分iOS开发者的都已经知道消息转发机制了,但是到底消息转发,底层发生了什么事情呢?今天带大家探索一下底层_...

  • iOS底层原理之消息转发

    简介 oc的方法调用,在底层会通过objc_msgSend进行消息发送 依次进行缓存快速查找imp,以及类的方法列...

  • iOS面试-基础

    [toc] Runloop AutoReleasePool 多线程 响应者链 消息响应机制 消息转发机制 iOS内...

  • 消息转发机制原理

    消息转发机制基本分为三个步骤: 1、动态方法解析新建一个HelloClass的类,定义两个方法: 对象在接收到未知...

网友评论

      本文标题:iOS底层原理 11 : 消息转发机制

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