【问题标题】:replacing self->isa because of deprecation由于弃用而替换 self->isa
【发布时间】:2013-01-29 19:24:51
【问题描述】:

我刚刚安装了 Xcode 4.6,现在我在我管理的旧代码中遇到了新错误。

编译器抱怨“直接访问 Objective-c 的 isa 被弃用,取而代之的是 object_setClass() 和 object_getClass()”,并且项目不会构建。

所以请告诉我,是:

object_setClass(self, [CustomClass class]);

适当的替换:

self->isa = [CustomClass class];

谢谢!

【问题讨论】:

  • xcode 是一个 IDE,它不会弃用任何东西。较新的 objc SDK 会这样做

标签: ios objective-c xcode class


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的确认。是的,我同意这段代码的设计真的很奇怪。不是我做的。
  • 如果我在野外遇到它,我会点燃该代码并尖叫着逃跑。
  • 我刚刚在我被告知要实现的库中找到了这样的代码 (array->isa = _JKArrayClass;)。 (哦,它是 2011 年 JSONKit 的一部分)
猜你喜欢
  • 2015-08-29
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多