LLVM 5.1“不推荐使用的 isa”的编译器错误

Posted

技术标签:

【中文标题】LLVM 5.1“不推荐使用的 isa”的编译器错误【英文标题】:Compiler Error with LLVM 5.1 "Deprecated isa" 【发布时间】:2014-03-20 07:37:55 【问题描述】:

libJSONKitJSONKit.m 出现编译器错误。 错误由此引发:"Assignment to Objective-C's isa is deprecated in favor of object_setClass()". 还有一个次要错误: "Direct access to Objective-C's isa is deprecated in favor of object_getClass()".

关于变通办法或解决方案的任何建议?

【问题讨论】:

有什么令人信服的理由不使用NSJSONSerialization 我对我的自定义 JSON 代码使用 NSJSONSerialization,但我正在使用调用这个特定库的 SoundCloudAPI。 【参考方案1】:

只需按照错误消息中的建议进行操作即可:

变化:

object->isa  = SomeClass;

到:

object_setClass(object, SomeClass);

【讨论】:

成功了!你能解释一下第一个版本的语法是什么意思吗? isa 是什么意思?这只是为了了解更多信息。 @MichaelLorenzo 请参阅以下 SO 问题,其中包含对 isa 的很好解释:***.com/questions/3405224/… 也许这在早期版本中也有效,但在 XCode 5.1.1 中,只需点击红色错误项目符号并选择“修复它”建议对我来说就像一个魅力。谢谢!【参考方案2】:

您可能必须从项目设置中删除 64 位架构。

发生这种情况是因为 Apple 添加了 arm64 作为更新到 ios 7.1 和 Xcode 5.1 的标准架构的一部分。 您可能必须手动将其设置为 armv7、armv7s ... JSONKit 还不支持 arm64。

【讨论】:

所以现在苹果需要 64 位,我必须有 arm64,但是我遇到了 isa 问题……当需要包含 arm64 时如何解决这个问题?我的一个 isa 问题在我可以编辑的文件中,另一个在我无法编辑的 lib 中,它出现了……。嗯 在这种情况下,解决方案通常包括检查导致问题的库的最新更新。这个库是提供开源项目还是来自商业产品?

以上是关于LLVM 5.1“不推荐使用的 isa”的编译器错误的主要内容,如果未能解决你的问题,请参考以下文章

xcode5:构建时出现 Apple LLVM 5.1 错误

CentOS 6.5 安装YouCompleteMe 报错汇总

LLVM编译器

安装llvm过程中要求gcc4.8可是我的明明就是gcc4.8

LLVM 缺少链接器,无法编译 lld(llvm 链接器)

LLVM 3.9 发布,编译器架构