我看到一种方法,在iOS 7.0中不推荐使用“方法A
,而是在Apple的文档中使用B
”。
我认为我把事情搞混了,所以要明确:
如果我确定用户的iOS版本(5.0),应该我使用A
或B
?由于它是5.0,A
应该可用,而B
可能不会,因为它是稍后实现的,对吗?
或者我使用SDK 7.0的事实是否意味着我应该始终使用B
,而不管用户的iOS版本是什么?
答案 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中,新方法不可用,因此您的代码使用旧方法。然而,这是痛苦的。