美文网首页iOS面试iOS学习开发
iOS Runtime面试题(能否向编译后得到的类中增加实例变量

iOS Runtime面试题(能否向编译后得到的类中增加实例变量

作者: 程序员_秃头怪 | 来源:发表于2019-08-01 16:29 被阅读3次

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

不能向编译后得到的类中增加实例变量;

能向运行时创建的类中添加实例变量;

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

面试题持续整理更新中,需要拿到第一手大厂面试题及答案文档可以添加 iOS进阶学习交流群:551346706 !结实人脉、讨论技术你想要的这里都有!

相关文章

网友评论

    本文标题:iOS Runtime面试题(能否向编译后得到的类中增加实例变量

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