是否可以使用 IOS 6 新方法并在 IOS 5 上部署。我应该遵循什么方法?请指导。
1 回答
使用弱链接类来做到这一点:
在使用高于您的部署目标的 iOS 或 OS X 版本中引入的任何符号之前,请检查该符号是否可用。如果符号不可用,请提供备用代码路径。
假设您将 Xcode 项目中的基本 SDK 设置为 iOS 4.0。这允许您的代码在该版本的操作系统中运行时使用该版本的功能。还假设您希望您的软件在 iOS 3.1 中运行,即使它不能使用该版本操作系统中的新功能。通过将部署目标设置为早期版本的操作系统来允许这样做。
在 Objective-C 中,
instancesRespondToSelector:
方法告诉你给定的方法选择器是否可用。例如,要使用availableCaptureModesForCameraDevice:
最初在 iOS 4.0 中可用的方法,您可以使用如下代码:
if ([UIImagePickerController 实例RespondToSelector: @selector (availableCaptureModesForCameraDevice:)]) { // 方法可用。 // 您的代码可以检查视频捕获是否可用,并且, // 如果是,则提供该选项。 } 别的 { // 方法不可用。 // 仅使用静止图像捕获的替代代码。 }
当您的代码在 iOS 4.0 或更高版本中运行时,它可以调用
availableCaptureModesForCameraDevice:
以确定设备上是否可以使用视频捕获。但是,当它在 iOS 3.1 中运行时,它必须假定只有静止图像捕获可用。如果您要使用各种设置构建此代码,您将看到以下结果:
如果您指定 iphoneos3.1 的基本 SDK 设置:构建将失败,因为该
availableCaptureModesForCameraDevice:
方法未在该系统版本中定义。如果您指定 iphoneos4.0 的基本 SDK 设置,然后将部署目标设置为:
iphoneos4.0:该软件只能在 iOS 4.0 或更高版本中运行,并且无法在早期系统上启动。
iphoneos3.1:该软件可以在 iOS 4.0 和 iOS 3.1 中运行,但无法在早期系统上启动。在 iOS 3.1 中运行时,该软件将使用备用代码来捕获图像。
通过将 getter 方法名称(与属性名称相同)传递给
instancesRespondToSelector:
.要确定弱链接 C 函数是否可用,请使用链接器将不可用函数的地址设置为 NULL 的事实。通过将地址与 NULL 或 nil 进行比较来检查函数的地址,从而检查其可用性。
参考