美文网首页
分类、运行时增加属性或者方法和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设计中如可变数组和不可变数组这中设计,是不是在这里有大用处?知道的人可以留言哈,谢谢。

    相关文章

      网友评论

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

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