美文网首页iOS软件重构与设计模式iOS简友广场
iOS知识复习笔记(7)---RunTime运行机制

iOS知识复习笔记(7)---RunTime运行机制

作者: 焦下客 | 来源:发表于2023-01-13 02:01 被阅读0次

    简介

    RunTime 又叫运行时,是一套底层C、C++、汇编语言API,其为iOS内部的核心之一,我们平时编写的OC代码,底层都是基于它来实现的。

    运行时将数据类型的确定由编译时推迟到了运行时。并且oc代码最终也是会转为runtime的c语言代码

    方法的本质是什么

    方法的本质其实就是发送消息(objc_msgSend),即寻找IMP的过程。

    消息发送会有以下几个流程:

    1. 快速查找流程,通过objc_msgSend查找缓存cache_t是否有imp实现。

    2. 慢速查找流程,通过lookUpImpOrForward 递归查找当前类以及父类的rw中methodlist里是否包含该方法。

    3. 如果以上两步都没找到则进入消息转发阶段:

      1.动态方法解析,通过调用resolveInstanceMethod和resolveClassMethod来动态方法决议,实现消息的动态处理

      2.快速转发流程,通过forwardingTargetForSelector实现快速转发,由其他对象来实现处理方法。

      3.慢速转发流程,先调用methodSignatureForSelector获取的方法签名,生成对应的invocation,再通过forwardInvocation来进行处理。

    4. 以上都没处理成功则执行doesNotRecognizeSelector,会崩溃报unrecognized selector 错。

    转发流程图如下: 消息转发流程.png

    消息传递过程中的概念

    instance 实例、class 类、meta class 元类 ,三者关系图如下:

    实例类和元类关系.png class 类内部结构如下图: class 类结构.png

    其中 class_rw_t 包含 class_ro_t, 分类方法,分类属性,分类协议

    其中class_ro_t 包含类名,类方法列表,类实例变量,类属性,类协议。

    项目中应用

    1. 动态重写方法

    2. 方法交换

    3. 解档归档

    4. 字典转模型

    5. 页面统计

    6. 防止按钮多次点击事件

    7. 防止数组越界

    8. 防止找不到方法崩溃

    9. 全局修改控件样式

    等等。

    相关文章

      网友评论

        本文标题:iOS知识复习笔记(7)---RunTime运行机制

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