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

Posted tiankongzhicheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么相关的知识,希望对你有一定的参考价值。

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

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

以上是关于能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发底层之常见问题解答 - 15

iOS开发底层之常见问题解答 - 15

iOS开发底层之常见问题解答 - 15

微软云azure上创建 VM虚拟机后能否向 VM 添加 NIC 网卡

Java 为什么要使用反射(通俗易懂的举例)

能否通过串口向argox CP2140 PPLB条码打印机发送PPLB指令?