美文网首页iOS经验分享
RunTime原理和使用

RunTime原理和使用

作者: 钎探穗 | 来源:发表于2020-07-29 17:35 被阅读0次

原理:消息转发:在一个实例里边使用resolveInstanceMethod方法,内部动态添加一个方法class_addMethod去实现。之所以这样实现,取决于

OC方法的组成:
SEL(方法名)
IMP(是一个函数指针,对应方法实现)
参数
相当于一本书的目录,里边标题,对应页码,页码对应具体的模块内容

在动态添加的方法里想要把原有方法传递的参数捕获到,以便自己使用,需要将自己动态添加实现的方法进行参数的补全。补全的参数是方法调用者(self),和方法编号(_cmd).

  • 那么这两个隐士参数是哪里来的呢?

OC方法的调用,底层是objc_msgSend函数,其中包含的参数有目标对象,方法名(即地址),具体传递参数。因此我们通过补全参数,通过方法编号,找到对应实现方法。

  • 缓存

当然在发送消息之前,会先查找缓存,如果缓存的方法名和传输进来要调度的目标方法名结果一致的话,直接调用。objc_msgSendunCache不一致的话,从类对象的方法列表中去查找,如果找到就调用,并在缓存中备份,cache_getImp。如果类对象方法和缓存中都没有的话,依次往父类层层查询。

使用的场景:
方法的调换

通过getClassMethod方法,由方法名获取对应的方法IMP,method_exchange交换方法的IMP。此时原有方法的地址指向新方法的实现,现有方法地址指向原有方法的实现。

1:对于table view的reloaddata方法,替换成自己的方法。在对数据进行分析后,没有数据返回的给一个占位视图,存在返回数据的直接操作使用。
2:字典转模型,自动归解档操作。

相关文章

  • RunTime原理和使用

    原理:消息转发:在一个实例里边使用resolveInstanceMethod方法,内部动态添加一个方法class_...

  • Runtime的原理和使用

    Runtime的原理和使用 runtime简介 runtime简称运行时。OC就是运行时机制,其中最主要的是消息机...

  • 2019-03-02

    Runtime Objective-C Runtime iOS底层原理探究-Runtime isa 和 Class...

  • Runtime 详解

    目录1、Runtime是什么?2、Runtime的原理和分析。3、Runtime的应用。 1、Runtime是什么...

  • RunTime理解与实战(二)

    上一篇我们已经对OC的Runtime做了简单的介绍,了解的其原理和API的使用RunTime理解与实战(一),这篇...

  • runtime的底层原理和使用

    先来了解一下isa的组成 我们去这个网站(https://opensource.apple.com/tarball...

  • iOS RunTime的原理和使用

    RunTime顾名思义运行时,就是系统在运行的时候的一些机制,最主要的是消息机制。对于C语言,函数的调用会在编译时...

  • iOS-分类重写原类方法时,如何调用原类方法

    目录 原理原理验证一(表面验证)原理验证二 (使用 runtime)原理验证三(底层验证)如何调用原类方法 一 原...

  • iOS Runtime原理及使用

    本文参考七七 iOS Runtime原理及使用,非常感谢该作者 runtime简介 因为Objc是一门动态语言,所...

  • Runtime的使用一:交换方法,扩展属性

    本文只介绍runtime的作用,以及如何使用,不涉及底层原理。 说实话,我大概花了2天左右研究了runtime的原...

网友评论

    本文标题:RunTime原理和使用

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