【发布时间】:2015-01-10 18:57:57
【问题描述】:
我正在开发一个 iOS 应用程序。我希望它支持 iOS 7 和 8。它运行得非常好,但是应用程序的许多不同部分都使用了 Apple API。其中一些 API 在 iOS 8 和 7 中都可以使用。但是,其中一些在 iOS 8 中已被弃用。因此,我去了 Apple 开发者网站,看看用什么来替换它们(新方法/等等....)。
但是,我现在遇到的问题是该应用程序可以在 iOS 8 上正常运行,但它的某些部分在 iOS 7 上无法正常运行,因为我正在尝试使用 iOS 8 API...... (笑)。
所以我只是想知道,在 iOS 8 和 7 上实现代码的最佳方式是什么。我有一些想法(如下),但我不确定哪个最好:
想法 1
每当我的代码不能在两个操作系统上运行时,我都会使用 if 函数(调用宏),如下所示:
if (SYSTEM_VERSION_LESS_THAN(@"8.0")) {
// iOS 7 device. Use iOS 7 apis.
}
else {
// iOS 8 (or higher) - use iOS 8 apis.
}
想法 2
我正在考虑在整个应用程序中使用 ifdef 定义,如下所示:
#ifdef __IPHONE_8_0
// iOS 8 code here....
#else
// iOS 7 code here....
#endif
哪种方式更好?我会认为第二个想法更快并且使用更少的资源对吗?
或者我的想法都是垃圾?有没有更好的方法来解决这个问题?
感谢您抽出宝贵时间,丹。
【问题讨论】:
-
不测试iOS版本。在运行时测试 API 的可用性。阅读文档中的“SDK 兼容性指南”。
-
仅供参考 - 如果 API 在 iOS 7 中受支持但在 iOS 8 中已弃用,则您根本不需要做任何事情。 iOS 7 API 是您应该使用的。它仍然可以在 iOS 8 下运行。
-
@rmaddy 你确定吗?我正在阅读一个简单的 XML Plist 文件。在 iOS 8 中,我用于读取 XML 文件的代码停止工作。当我使用 iOS 8 api 对其进行测试后,它又开始正常工作了。还说应该坚持使用已弃用的 API ......这听起来很危险,肯定会导致内存泄漏或意外崩溃。
-
我 100% 确定这一点。如果您对特定 API 有疑问,请发布特定于该问题的问题。这个问题有点笼统,无法提供具体细节。
-
不推荐使用的 API 并不意味着,您不应该在当前版本中使用它。这意味着,它不会从下一个版本开始工作,并且只能工作到当前版本。
标签: ios objective-c cocoa-touch deprecated