Fel*_*xyz 12 runtime dynamic objective-c objective-c-runtime
我正在使用改变一些对象的类object_setClass(id object, Class cls).我正在将类更改为原始类的子类.然后我设置了一些只在子类上定义的属性,事情似乎工作正常.
我有点惊讶这是有效的,因为object_setClass据我所知,不重新分配对象,它只改变isa指针.如果子类实例比原始类实例大得多(意味着有更多的ivars),我看不到对象如何按预期工作.
这是否只是因为内存中的对象之间存在大量缓冲内存(由于对齐等)?
这是强大的,还是在某些情况下会崩溃?
它可能会崩溃.从这里运行时的源代码中可以看出,它实际上只是交换了isa指针.
如果你真的想交换isa到isa更多的ivars一个子类,你应该使用class_createInstance具有非零extraBytes.
| 归档时间: |
|
| 查看次数: |
3357 次 |
| 最近记录: |