美文网首页
动态决议、快速转发、慢速转发

动态决议、快速转发、慢速转发

作者: 改变1 | 来源:发表于2022-12-07 12:30 被阅读0次

在项目运行过程中,如果找不到方法,runtime是有三次机会给我们处理的。写了一个闪退,获取了一个代码调用信息如下:


image.png

首先如果我们实现了resolveInstanceMethod方法首先会执行,此动态决议系统也供了一个类方法无法找到时发生闪退的一个实现,为resolveClassMethod。但是殊途同归,如果我们有实现resolveClassMethod当类方法无法找到时,系统发现我们实现了此动态决议方法,会直接调用。如果没有实现它最后还是会调用resolveInstanceMethod方法。根据苹果的源码可以看下


image.png
为什么这么设计?既然都能用resolveInstanceMethod处理,还要脱裤子放屁?因为效率问题,如果没有类方法的提供,当找不到此实现方法时,系统会一直向父类查找,直到查到顶层NSObject,调用链会很长。
有一个需要注意的点是动态决议可以能会被调用两次,原因是当动态决议方法和快速转发都没有处理问题的时候,动态决议会调用两次。原因是慢速转发执行时,会调用lookUpImpOrForward方法,而lookUpImpOrForward方法执行时,就会调用resolveInstanceMethod一次,所以会有两次调用

相关文章

  • iOS 的objc_msgSend查找流程以及消息转发流程

    /本文主要分为3个阶段:快速查找(汇编部分)、慢速查找(Runtime部分)、动态决议及消息转发./ 方法的本质 ...

  • iOS-底层原理-消息流程objc_msgSend分析之meth

    1.什么是慢速查找、动态方法决议、消息转发 前面的博客介绍了,objs_msgSend查找cache的快速查找流程...

  • Runtime

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

  • 消息转发流程

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

  • OC底层探索12-方法动态决议,方法慢速、快速转发

    在OC底层探索11-objc_msgSend慢速查找流程[https://www.jianshu.com/p/26...

  • 消息转发之动态方法决议 & 消息转发

    前言 前面的两篇文章我们已经探索了消息的快速查找和慢速查找的流程。 objc_msgSend 流程之缓存查找[ht...

  • iOS 消息转发机制

    消息转发机制分为三步: 一、动态方法解析 二、快速消息转发 三、标准消息转发(normal forwarding)...

  • OC底层原理12 - 消息转发

    消息转发 经过了快速查找,慢速查找,动态方法解析之后,仍然没有找到SEL对应的IMP,此时我们在抛出异常信息的信息...

  • Runtime

    定义 runtime 详解文章 1. 消息转发 动态方法解析(方法调用的必经之路) 快速转发(动态解析失败后,指...

  • iOS 消息转发机制

    消息转发(Message Forwarding)是在查找 IMP 失败后执行一系列转发流程的慢速通道,如果不作转发...

网友评论

      本文标题:动态决议、快速转发、慢速转发

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