【问题标题】:Check iOS version as Apple suggested按照 Apple 的建议检查 iOS 版本
【发布时间】:2023-03-28 23:47:01
【问题描述】:

苹果在 iOS7 过渡指南wrote a snippet to check the iOS version

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
   // Load resources for iOS 6.1 or earlier
} else {
   // Load resources for iOS 7 or later
}

但如果 Apple 推出另一个 iOS6 版本,例如 6.2,会怎样?将自动加载 iOS7 版本。
最好是这样的:

if (floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_7_0) {
   // Load resources for iOS 7 or later
} else {
   // Load resources for iOS 6.1 or earlier
}

很遗憾,该基金会编号不可用。你认为苹果建议的方法安全吗?

【问题讨论】:

    标签: ios iphone objective-c ipad ios7


    【解决方案1】:

    NSFoundationVersionNumber_iOS_6_1 == 993.00,没有问题。 但是 NSFoundationVersionNumber_iOS_7_0 == 1047.22 ,所以 floor() 函数可能不对~

    【讨论】:

    • 没错,你根本不需要使用地板。
    • 在某些情况下您需要地板,例如if (floor(NSFoundationVersionNumber)
    【解决方案2】:

    iOS 6.2 应该具有 6.1 的所有 API 功能,这样才能正常工作。这些测试主要是为了了解如何做某事(即存在哪些 API 功能)。

    【讨论】:

    • 已弃用的 API 可能会被删除。也许最安全的检查是使用-respondsToSelector: 来查看是否支持方法调用?虽然这仅适用于多年来已更改的现有课程。
    • 如果您查看文档,您甚至可以看到 NSFoundationVersionNumber_IOS_6_0 与 6_1 共享相同的编号,因此 6_2 不太可能有不同的编号并破坏任何东西
    • 但是 5.1 的基础版本号比 5.0 大。因此,如果 6.2 的版本号大于 6.1,那么测试 floor(NSFoundationVersionNumber) &lt;= NSFoundationVersionNumber_iOS_6_1 将在 6.2 上失败,并且 6.2 将被误认为是 7.0。 “iOS 6.2 应该具有 6.1 的所有 API 功能” 的事实并没有帮助。
    • 我们不是在谈论 5.1,而是在谈论 6_0 和 6_1,它们的编号相同。
    • 我还看到 6.0 和 6.1 共享相同的编号,Apple 不太可能发布 6.2,因为通常错误修复来自 6.x.y。对我来说,了解 iOS 版本的最佳系统是选择适用于所有设备的方法或类并检查其是否存在,但由于该系统已被 Apple“批准”,因此我对人们对其安全性的看法感到好奇。我想知道为什么苹果不放一个简单的 +isIOS7 +isIOS6 等
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多