gpt4 book ai didi

ios - 新的 iOS SDK 功能如何向后兼容

转载 作者:行者123 更新时间:2023-11-28 18:02:25 25 4
gpt4 key购买 nike

如果 SDK 添加新功能,这些功能是否适用于旧设备?如果 API 获得新方法,编译器是否会处理这些新方法以获取某些内部 native 代码,或者添加的新功能是否无法在未运行新操作系统的设备上使用?

最佳答案

当 Apple 添加新的 SDK 功能时,它们几乎总是依赖于同时添加到操作系统且在早期迭代中不可用的新框架或运行时功能。有极少数异常(exception),但它们总是与添加到编译器的 SDK 功能有关。例如,根据 iOS 5 SDK 中有关自动引用计数的公开信息,假设您将能够构建具有所有 ARC 功能的 iOS 4 应用程序(自归零弱指针除外)似乎是合理的,因为这需要一些运行时支持。尽管在 Apple 打算提供的工具通过 NDA 出来之前我们无法确定。

Apple 希望您使用 Objective-C 运行时的动态特性,仅在新功能可用时使用新功能,并将您的基本部署目标设置为您的应用程序运行的最低受支持操作系统版本一个合理的范围。

例如:

if(![someObject respondsToSelector:@selector(relevantNewMethod)])
{
// this version of the OS doesn't actually have relevantNewMethod
// so we'll do something else instead; attempting to use it will
// raise an exception on this device
}

或者:

if(NSClassFromString(@"ShinyNewiOSClass"))
{
// ShinyNewiOSClass is implemented on this version of the OS, so
// we can use it. Otherwise we'd better find something else to do
// instead...
}

NSClassFromString 返回 Class 实例或 nil 如果不存在具有该名称的类,因此您可以改为获取 NSClassFromString 的结果和如果您愿意,可以对其进行习惯性的 alloc 初始化。

一个典型的例子是仅当 MFMailComposer 可用时才显示“电子邮件”按钮(如果您希望在使用可用的 iOS 3 方法的同时支持 iOS 2)。

对于全新的框架,标准做法是弱链接(这意味着您的程序希望加载它们,但如果它们不存在,操作系统不应引发异常),然后使用相同的反射功能来检查如果相关类在运行时可用。

关于ios - 新的 iOS SDK 功能如何向后兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com