美文网首页
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 : 消息转发机制

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