如果用户的iOS版本低于7.0,我应该使用7.0中弃用的方法吗?

时间:2014-01-23 23:40:04

标签: ios objective-c

  • 我使用的是SDK 7.0
  • 我的部署目标是4.3
  • 我正在使用5.0模拟器进行测试

我看到一种方法,在iOS 7.0中不推荐使用“方法A,而是在Apple的文档中使用B

我认为我把事情搞混了,所以要明确:

  • 如果我确定用户的iOS版本(5.0),应该我使用AB?由于它是5.0,A应该可用,而B可能不会,因为它是稍后实现的,对吗?

  • 或者我使用SDK 7.0的事实是否意味着我应该始终使用B,而不管用户的iOS版本是什么?

2 个答案:

答案 0 :(得分:5)

使用旧方法。在旧版本的iOS下,方法B将不可用。贬值的方法很少(从来没有到目前为止?)实际上消失了。唯一的例子是UIDevice uniqueIdentifier,但即便没有消失,它现在只是返回垃圾。

当然你可以这样做:

if ([someClass resondsToSelector(someNewerMethodSelector)]) {
    // call the new method
} else {
    // call the old method
}

这样的代码将运行较新的方法(如果存在)或旧方法(如果不存在)。也可以对较新的类进行类似的检查。

BTW - 为什么要花费精力来支持iOS 4.3甚至5.x?如果你有充分的理由支持iOS 7和iOS 6.x.除非您有特定需求或要求,否则支持4.3和5.x并不值得您努力。

如果你继续支持4.3,你最好在4.3的设备上彻底测试你的应用程序,以确保你不会不小心打电话和5.0+ API。

答案 1 :(得分:4)

有时会在操作系统版本中添加一个方法,并且支持旧方法和新方法,然后在较新的操作系统版本中弃用旧方法。

最近,Apple一直在发布更新的方法/类/ API并同时弃用旧版本。

这意味着如果您支持旧操作系统版本,则别无选择。您必须在旧操作系统中使用旧方法,因为新方法不存在。因此,如果您支持iOS 5,6和7,则只有在编写运行时代码以检查是否支持时,才能使用新方法。然后,您需要决定如何处理旧操作系统版本。

有时使用已弃用的方法并使用它可以更简单。该代码适用于所有支持的操作系统版本。但是,这比编写在运行时检查的代码更少“面向未来”,如果新版本不可用,则仅使用弃用的方法。

想象一下,你有一个在iOS 5,6和7上运行的应用程序。你使用的是iOS 6中改变的方法。它在iOS 7中已被弃用,但仍然有效。如果您只是使用已弃用的方法,它适用于所有3个目标操作系统版本,但是iOS 8出现时呢?当Apple弃用方法/ API /类时,这意味着在将来某个日期他们将完全删除它。

如果新版本不可用,则执行运行时检查并使用已弃用的方法是最常用的工作,但是最具前瞻性。在iOS 8中,如果Apple删除了已弃用的方法,则代码可以正常工作。在iOS 5中,新方法不可用,因此您的代码使用旧方法。然而,这是痛苦的。