美文网首页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运行机制

    简介 RunTime 又叫运行时,是一套底层C、C++、汇编语言API,其为iOS内部的核心之一,我们平时编写的O...

  • iOS runtime 笔记总览

    个人已掌握的知识点 runtime的一些综述iOS runtime笔记一iOS runtime 笔记二 — Met...

  • iOS面试基础知识 (一)

    作者:akon 原文地址: 一、Runtime原理 Runtime是iOS核心运行机制之一,iOS App加载库、...

  • Runtime要点

    Runtime原理 Runtime是iOS核心运行机制之一,iOS App加载库、加载类、执行方法调用,全靠Run...

  • iOS基础知识 (一)

    一、Runtime原理 Runtime是iOS核心运行机制之一,iOS App加载库、加载类、执行方法调用,全靠R...

  • iOS~runtime

    iOS~runtime理解iOS runtime学习笔记Objective-C Runtime让你快速上手Runt...

  • iOS 常见知识点(一):Runtime

    iOS 常见知识点(二):RunLoop iOS 常见知识点(三):Lock Runtime Runtime 是一...

  • iOS开发·runtime原理与实践: 基本知识篇

    iOS开发·runtime原理与实践: 基本知识篇 iOS开发·runtime原理与实践: 基本知识篇

  • iOS

    @(03.自己的笔记)[iOS] [TOC] iOS Runtime OC_runtime运行时官方文档翻译 NS...

  • iOS知识点整理

    iOS知识点整理 持续更新中。。。 runtime相关 iOS 模块详解—「Runtime面试、工作」看我就 ? ...

网友评论

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

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