美文网首页iOS面试题
能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实

能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实

作者: EmulatingStep | 来源:发表于2020-03-11 11:25 被阅读0次

    能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?

    • 不能向编译后得到的类中增加实例变量
    • 能向运行时创建的类中添加实例变量
    1. 因为编译后的类已经注册在runtime中,类结构体中的objc_ivar_list(实例变量的链表)和instance_size(实例变量的内存大小)已经确定;同时runtime会调用 class_setvarlayoutclass_setWeaklvarLayout来处理strongweak引用。所以不能向编译后得到的类中添加实例变量。

    2. 运行时创建的类是可以添加实例变量。调用class_addIvar函数。但是得在调用 objc_allocateClassPair之后,在objc_registerClassPair之前。其实就是在编译的过程中向类中添加实例变量,编译后类的实例链表、方法链表、变量大小已经确定。

    iOS面试题汇总

    相关文章

      网友评论

        本文标题:能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实

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