您所说的编译后的类&动态添加的类,不太能理解是个什么含义

来源:5-8 动态方法解析相关面试问题&面试总结

鹤笑天

2020-03-28

1.我理解不能往编译后的类添加实例变量就是说,不能往class_ro_t中添加实力变量?
应该也是不可以往编译后的类class_ro_t中添加方法吧,想要添加方法只能是通过消息转发的方式动态生成?
2.动态添加类我理解就是class rw t,这里的实例变量以及方法是可以添加的?(也就是通过分类来添加)
实例变量放在了Associationhashmap中?
添加的实例方法实际是往class rw t methods二位数组中添加,之后这个二位数组与ro t中的一位数组合并,当消息传递时在 rw与ro 合并的二维数组里面找?

老师,我上描述是否全部准确

写回答

1回答

于海

2020-04-03

  1. 这个 class_ro_t 内存布局定好了之后不能再增加了。所以改不了,除非去修改你的代码

  2. 动态添加方法和变量 有可能是你描述的情况,你可以看下 class_addMethod的源码验证你的猜测

  3. 关联对象是 存放在一个全局单例里的 就是AssociationHasMap里

  4. 嗯 所有的方法最后应该是会合并到一个数组里的。

  5. 你很棒,可以对源码再深入研究下

0
1
鹤笑天
谢谢老师
2020-04-03
共1条回复

资深大牛带你深度剖析ios高级面试

从BAT/TMD名企真题入手,结合源码及应用,构建完整iOS知识体系

1749 学习 · 600 问题

查看课程