iOS 7:不推荐使用“isa”

Posted

技术标签:

【中文标题】iOS 7:不推荐使用“isa”【英文标题】:iOS 7 : 'isa' is deprecated 【发布时间】:2013-11-09 11:01:43 【问题描述】:

当我在 ios7 中运行我的应用程序时收到警告“'isa' 已弃用”,我不知道如何修复此警告消息。请任何人帮助。

array->isa      = _JKArrayClass;

【问题讨论】:

我建议从你的项目中去掉 JSONKit。一方面,它与 64 位架构不兼容,因为使用了语言 hack。 【参考方案1】:

包括<objc/runtime.h>

array->isa = _JKArrayClass; 之类的所有内容替换为object_setClass(array, _JKArrayClass)

以及class = array.isaclass = object_getClass(array) 之类的所有内容

【讨论】:

另外,请在 GitHub 上分享你的 fork? 我在一次构建中遇到了两次此错误。您的修复适用于其中一个,但另一个似乎在库中,我无法编辑或保存它。请问我该如何解决?不确定这个库是从哪里来的。【参考方案2】:

我想我会为您的 Cocoapods 用户分享我的解决方案。 (如果您找到了更好的解决方案,请在 cmets 中告诉我)

我正在使用 Cocoapods,因此我不想修改我引入的库的源代码。问题是由 Cocoapods 将“直接使用 'isa'”值设置为“是(对待as error)”,从而导致所有自动构建失败。

我已通过将其添加到我的 Podfile 来解决问题:

post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['CLANG_WARN_DIRECT_OBJC_ISA_USAGE'] = 'YES'
        end
    end
end

这样直接使用“isa”将显示为警告,但不会导致自动构建失败。

但是在 arm64 iOS 设备构建(使用 Xcode 5.1.0)中,奇怪的是 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = 'YES' 选项不会正确应用(视为错误)。 如果需要构建,包括 arm64 只需 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = 'NO' 选项即可。

【讨论】:

谢谢,这行得通。在 xcode 版本 5.0.2 (5A3005) 和小牛 19.9.1 中测试 不幸的是,我的 pod 更新未能应用此补丁。没有关于错误的详细信息:LoadError - no such file to load... 我正在使用 Xcode 5.1 和 i0S 7.1。你对此有什么想法吗?谢谢 那个错误并没有告诉我太多。如果我没记错的话,这个错误是由 JSONKit 引起的。如果这个错误是由 pod 引起的,那么这个修复(我还没有测试过)应该可以工作。否则,您应该能够在代码中修复它。你解决了吗?

以上是关于iOS 7:不推荐使用“isa”的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 中不推荐使用音量 [重复]

iOS 7:不推荐使用 MPMusicPlayerController 音量。现在如何更改设备音量?

Swift - 坐标不可用:从 iOS 7 开始不推荐使用 API

iOS 7 及更高版本 (8.4) 中不推荐使用 SegmentedControlStyle | Xcode 6.4

iOS中类元类isa详解

iOS 底层原理 - isa原理