美文网首页iOS
Xcode 12 Runtime的改进

Xcode 12 Runtime的改进

作者: LonnieQ | 来源:发表于2020-07-19 01:23 被阅读0次

1. OC Runtime 类结构体变小了

在Runtime中,一个类原本由class_ro_tclass_rw_t两个结构体表示。class_ro_t是类中只读的部分,class_rw_t是类中可读写的部分。

截屏2020-07-19 00.25.34.png

为了减少冗余,最新的runtime在class_rw_t的基础上分出了class_rw_ext_t这个可选结构体,如果一个OC类没有动态性,可以节省这一部分内存。

截屏2020-07-19 00.27.07.png

2. OC method list的变化

新版runtime采用了Relative method lists的策略,即通过偏移量,可以将原来需要64比特表示的method地址改成只需要32比特表示。这样可以减少一半内存。


截屏2020-07-19 00.35.29.png

如果进行方法交换,那么通过偏移量表达的方法就失效了。这时候runtime会用一个全局表格记录交换的方法。


截屏2020-07-19 00.37.15.png

3. OC tagged pointers变化

OC tagged pointers可以利用指针地址的一部分保存一些比较小的数据结构,如NSNumber、NSDate,充分利用了指针地址。
原有的Tagged pointers分为Tag、Payload两部分,Tag用来标记这是什么类型,如NSDate, NSNumber等,Payload是用来保存类信息的地方。


截屏2020-07-19 00.46.20.png

新版的Tagged pointers结构如下,增加了Extended部分。这部分是给Swift语言使用定义Tagged pointers类型的。比如利用指针地址表示enum类型。


截屏2020-07-19 00.47.42.png

相关文章

  • Xcode 12 Runtime的改进

    1. OC Runtime 类结构体变小了 在Runtime中,一个类原本由class_ro_t和class_rw...

  • ios中Runtime的介绍以及使用

    ios黑魔法--runtime介绍: 在Xcode5以后 ,苹果不建议开发者使用底层。为了能够使用runtime,...

  • iOS runtime

    ---参考文章--- 暂时没有 一、如何在Xcode中使用runtime Xcode默认是不建议开发者使用runt...

  • LLDB

    你可以用LLDB做Xcode能做的功能,但是Xcode有些功能,只有LLDB才能做。 可以在runtime的时候写...

  • Runtime 机制

    1.Runtime 消息机制 从xcode6之后苹果不建议直接使用obj_msgSend(),需要自已去xcode...

  • Xcode Runtime Tool

    Xcode 9中有许多Runtime Tool可以帮助开发者找到代码错误,包括如下: Main Thread Ch...

  • iOS14适配和Xcode12模拟器运行兼容

    Xcode12适配 Xcode12模拟器跑不通,需要做以下修改 Xcode12把valid Architectur...

  • Xcode 调整导航目录字体大小

    级别:★☆☆☆☆标签:「Xcode navigator size」「Xcode 12 beta」「Xcode导航字...

  • iOS-万能的Runtime(2):基于Runtime机制解决线

    万能的Runtime(1):《iOS-浅谈NSUserDefaults保存数据的缺点以及改进方案:UDUserDe...

  • 苹果官方功能入口

    Xcode 官方资源包 苹果官方文档 Runtime 源码 RunLoop 源码 加急审核加急审核内容.png 查...

网友评论

    本文标题:Xcode 12 Runtime的改进

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