我刚刚安装了Xcode 4.6,现在我在一个古老的代码中遇到了新的错误。
编译器现在抱怨“直接访问objective-c的isa已被弃用,而有利于object_setClass()和object_getClass()”并且不会构建。
所以我的问题是,这是正确的等价物吗?
self->isa = [CustomClass class];
替换为:
object_setClass(self, [CustomClass class]);
谢谢
答案 0 :(得分:12)
访问isa
已被弃用了一段时间,这些工具并未告诉您这一点。值得注意的是,至少只要标记指针存在于obj-c中,它就被弃用了。
是的,object_setClass()
是合适的替代品。
那说,为什么你甚至需要这个?替换对象的类是非常罕见的,我能想到的唯一有效的情况是当你试图动态子类化一个类时,为了将新行为注入到单个实例中而不修改整个类(当然,这可能是你不需要做的事情。)