Runtime
文章平均质量分 95
Runtime知识
卡卡西Sensei
这个作者很懒,什么都没留下…
展开
-
iOS底层探索之Runtime(五): 消息转发
1.回顾 在上篇博文iOS底层探索之Runtime(四): 动态方法解析已经分析了动态方法解析阶段,本次内容主要对消息发送的第三个阶段——>消息转发进行分析。 2. 快速转发 3. 慢速转发 4. 方法签名 2. 总结 ...原创 2021-07-09 17:46:26 · 515 阅读 · 0 评论 -
iOS底层探索之Runtime(四): 动态方法解析
1. 回顾 iOS底层探索之Runtime(一):运行时&方法的本质 iOS底层探索之Runtime(二): objc_msgSend&汇编快速查找分析 iOS底层探索之Runtime(三): lookUpImpOrForward慢速查找分析 在上一篇博文中,介绍了Runtime的慢速查找流程lookUpImpOrForward,本章内容主要分析动态方法解析流程。 在缓存中、自己的class_rw_t中、父类的cache中、父类的class_rw_t中都没有找到imp,就会进入objc原创 2021-07-08 14:01:02 · 636 阅读 · 2 评论 -
iOS底层探索之Runtime(三): lookUpImpOrForward慢速查找分析
1. 回顾 iOS底层探索之Runtime(一):运行时&方法的本质 iOS底层探索之Runtime(二): objc_msgSend&汇编快速查找分析 在前面的文章中介绍了消息发送(objc_msgSend)流程,主要是汇编快速查找cache的过程,并对汇编源码进行了分析,本章内容主要分析慢速查找_lookUpImpOrForward流程。 2. _lookUpImpOrForward 在汇编的快速查找没有找到缓存,就会进入__objc_msgSend_uncached,在__objc_原创 2021-07-01 15:56:20 · 808 阅读 · 4 评论 -
iOS底层探索之Runtime(二): objc_msgSend&汇编快速查找分析
1. 回顾 在上篇博客iOS底层探索之Runtime:01—运行时&方法的本质中介绍了 运行时和 编译时的概念。同时也知道了OC方法的调用,本质上是发送消息,在底层通过objc_msgSend方法来实现。那么底层是如何实现的呢? 2. 消息发送底层如何实现 补充1 Runtime有两个版本 ⼀个是Legacy版本(早期版本) ,另一个是Modern版本(现⾏版本) 早期版本对应的编程接⼝:Objective-C 1.0 现⾏版本对应的编程接⼝:Objective-C 2.0 早期版本⽤于Objec原创 2021-06-29 14:34:25 · 794 阅读 · 0 评论 -
iOS底层探索之Runtime(一):运行时&方法的本质
1. 回顾 在之前的几篇博客里面,已经对OC类的底层结构进行了分析,并对内部主要的成员变量(isa/bits)做了详细的分析。在上两个博客 iOS底层探索之类的结构—cache分析(上) iOS底层探索之类的结构—cache分析(下) 对类中的cache做了比较详细的分析。后面通过断点查看汇编可以发现在insert方法调用流程之前,还有一个cache读取流程,objc_msgSend和 cache_getImp。这就涉及到Runtime的知识点了,之前的内容都是承上启下的,是互相关联的。 2. Runt.原创 2021-06-28 17:32:27 · 784 阅读 · 4 评论 -
Runtime之消息转发
目录 消息转发的流程图: 1.动态方法解析 2.快速转发 3.慢速转发 demo地址 在OC中的实例对象调用一个方法称作发送消息 当向某个对象发送一条消息时,若该对象的方法列表以及它相应继承链上的方法列表都无法找该消息的方法实现时,则会触发消息转发机制。 比如有如下代码: NS_ASSUME_NONNULL_BEGIN @interface Person :...原创 2019-01-24 10:51:28 · 730 阅读 · 0 评论 -
iOS对象的归档和解档-Runtime实现
前言 在之前的文章什么是序列化?序列化的作用是什么?iOS中怎么实现序列化?中我们用普通方法实现了对象的序列化操作,也就是归档和解档。 对遵循了NSCoding协议的iOS对象进行归档和解档是我们经常用到的一种数据持久化方式。但是如果对象的属性太多了我们还是对每个属性都实现一遍encodeObject:forKey:和decodeObjectForKey:方法,这样写的代码量太多了,会显得很繁...原创 2019-01-19 15:03:22 · 812 阅读 · 0 评论