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

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

作者: 傲骨天成科技 | 来源:发表于2022-08-10 14:34 被阅读0次

结论:

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

解释:

因为编译后的类已经注册在runtime中,类结构中的objc_ivar_list实例变量的链表和instance_size实例变量的内存大小已经确定,同时runtime会调用class_setIvarLayout或class_setWeakIvarLayout来处理strong weak引用。所以不能向存在的类中添加实例变量。
运行时创建的类是可以添加实例变量的,调用class_addIvar函数,但是得在调用objc_alloccateClassPair之后,objc_registerClassPair之前,原因同上。

疑问:

能否向编译后得到的类中添加实例方法?
能,可以通过runtime给编译后的类中添加实例方法,由于类的内存大小和实例方法的个数无关,和实例变量的个数有关

相关文章

网友评论

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

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