因为Xcode 4.6弃用而取代self-gt; isa

时间:2013-01-29 19:24:52

标签: ios objective-c c xcode class

我刚刚安装了Xcode 4.6,现在我在一个古老的代码中遇到了新的错误。

编译器现在抱怨“直接访问objective-c的isa已被弃用,而有利于object_setClass()和object_getClass()”并且不会构建。

所以我的问题是,这是正确的等价物吗?

self->isa = [CustomClass class];

替换为:

object_setClass(self, [CustomClass class]);

谢谢

1 个答案:

答案 0 :(得分:12)

访问isa已被弃用了一段时间,这些工具并未告诉您这一点。值得注意的是,至少只要标记指针存在于obj-c中,它就被弃用了。

是的,object_setClass()是合适的替代品。

那说,为什么你甚至需要这个?替换对象的类是非常罕见的,我能想到的唯一有效的情况是当你试图动态子类化一个类时,为了将新行为注入到单个实例中而不修改整个类(当然,这可能是你不需要做的事情。)