美文网首页
分类、运行时增加属性或者方法和ro,rw,rwe几种状态关系

分类、运行时增加属性或者方法和ro,rw,rwe几种状态关系

作者: 改变1 | 来源:发表于2022-12-06 15:43 被阅读0次

class_ro_t是在编译的时候⽣成的。当类在编译的时候,类的属性,实例⽅法,协议这些内容就存在class_ro_t这个结构体⾥⾯了,这是⼀块纯净的内存空间,不允许被修改。

class_rw_t是在运⾏的时候⽣成的,类⼀经使⽤就会变成class_rw_t,它会先将class_ro_t的内容"拿"过去(类似于剪切,不是复制),然后再将当前类的分类的这些属性、⽅法等拷⻉到class_rw_t⾥⾯。它是可读写的。

class_rw_ext_t可以减少内存的消耗。苹果在wwdc2020⾥⾯说过,只有⼤约10%左右的类需要动态修改。所以只有10%左右的类⾥⾯需要⽣成class_rw_ext_t这个结构体。这样的话,可以节约很⼤⼀部分内存

我们调用runtime api进行运行时更改,或者有分类存在,要进行更改时,实际上系统会生成class_rw_ext_t这个临时修改区域,供我们操作。也就是说,当类被使用期间,如果涉及到更改一些的值,或者动态变更的,系统会将原class_rw_t中的部分可操作数据拷贝到class_rw_ext_t,以供操作,其余的不会。我在想oc设计中如可变数组和不可变数组这中设计,是不是在这里有大用处?知道的人可以留言哈,谢谢。

相关文章

  • 类的加载原理(中)

    realizeClassWithoutSwift引入 如何找到执行class的rw、ro、rwe操作入口 通过最直...

  • 类目加载

    ro-rw 编译时先将所有方法写到ro 文件,在运行时 若是非懒加载,则从ro文件里读取 若是懒加载,则先从rw文...

  • iOS class_ro_t和class_rw_t的区别 cat

    本文主要介绍class_ro_t和class_rw_t的区别、分类加载过程以及多个分类加载的问题 class_ro...

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

    需要知识 class_ro ,class_rw 分类中重写了原类方法导致原类中的方法被覆盖了,category的底...

  • OC-关联对象

    类扩展和分类 category:类别、分类用来给类增加方法、属性、协议不能增加成员变量,在分类的结构体中并没有存储...

  • 目标文件各代码段、数据段分析

    Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系 Code:代码的大...

  • 470.class_ro_t 和 class_rw_t 的区别

    class_ro_t class_ro_t存储了当前类在编译期就已经确定的属性、方法以及遵循的协议,里面是没有分类...

  • 子类和分类怎么选择?

    属性无法满足开发需求的时候,选择子类. 方法不够灵活的时候,选择分类. 分类可以利用运行时,动态添加属性.

  • 单片机分散加载与部分升级

    Keil编译后的Code,RO,RW,ZI分别表示什么 Code:代码的大小 RO:常量所占空间 RW:程序中已经...

  • iOS-Category、Extension

    一、分类的使用注意事项: 1、分类只能增加方法,不能增加成员变量。 原因: Category是运行时决议,因为在...

网友评论

      本文标题:分类、运行时增加属性或者方法和ro,rw,rwe几种状态关系

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