【发布时间】:2009-02-17 16:42:55
【问题描述】:
在 Objective-C 中,您可以在运行时更改对象的动态类型,方法是为其分配 isa 成员变量:
id object = ...;
object->isa = [SomeClass class];
这是未定义的行为吗?我目前正在这样做,因为它是为了做其他事情,它似乎正在工作,但我觉得这样做很肮脏。我设置的新类没有添加任何成员变量,它只是覆盖了一个方法并添加了一个新方法,因此类大小是相同的。我觉得如果我改变对象的大小,会导致很多不好的结果。
【问题讨论】:
-
您可能会遇到 KVO 的问题。他们也使用 isa-swizzling。 Mike Ash 有一个完整的解决方案:mikeash.com/pyblog/…
标签: objective-c dynamic-typing