0

是否可以使用 IOS 6 新方法并在 IOS 5 上部署。我应该遵循什么方法?请指导。

4

1 回答 1

0

使用弱链接类来做到这一点:

在使用高于您的部署目标的 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 进行比较来检查函数的地址,从而检查其可用性。

参考

于 2013-12-02T18:32:34.707 回答