使用Xcode 4.5和iOS 6 SDK时,是否可以定位较旧的iOS版本?

问题描述:

IS可以使用IOS 6新方法并部署在IOS 5上。 我应该遵循什么方法? PLease指南。使用Xcode 4.5和iOS 6 SDK时,是否可以定位较旧的iOS版本?

使用弱连接类来完成这一点:

使用或iOS版本的OS X比你的部署目标后引入的任何符号之前,请检查符号是否可用。如果符号不可用,请提供一个替代代码路径。

假设您将Xcode项目中的基础SDK设置为iOS 4.0。这允许您的代码在该版本中运行时使用该版本操作系统中的功能。假设你想让你的软件在iOS 3.1中运行,即使它不能在该版本的操作系统中使用更新的功能。通过将部署目标设置为较早版本的操作系统来实现此目的。

在Objective-C中,instancesRespondToSelector:方法会告诉您给定的方法选择器是否可用。例如,使用availableCaptureModesForCameraDevice:方法,第一个可用的的iOS 4.0,你可以使用如下代码:

 
if ([UIImagePickerController instancesRespondToSelector: 
       @selector (availableCaptureModesForCameraDevice:)]) { 
    // Method is available for use. 
    // Your code can check if video capture is available and, 
    // if it is, offer that option. 
} else { 
    // Method is not available. 
    // Alternate code to use only still image capture. 
} 

当你的代码的iOS 4.0上运行或更高版本,它可以调用availableCaptureModesForCameraDevice:确定如果视频捕捉在设备上可用。但是,它在iOS 3.1中运行时,必须假定只有静止图像捕捉可用。

如果你要建立这个代码使用不同的设置,你会看到下面的结果:因为availableCaptureModesForCameraDevice:方法没有定义 构建会失败:

如果指定iphoneos3.1的基本SDK设置在那个系统版本中。

如果指定iphoneos4.0的基本SDK设置,然后将部署目标:

iphoneos4.0:该软件将运行只在iOS 4.0或更高版本,将无法启动较早系统。

iphoneos3.1:该软件将在iOS 4.0和iOS 3.1中运行,但无法在早期系统上启动。在iOS 3.1中运行时,软件将使用替代代码捕获图像。

检查一个Objective-C特性的通过使吸气剂的方法名(这是相同的属性名),以instancesRespondToSelector:的可用性。

要确定弱链接的C函数是否可用,请使用链接器将不可用函数的地址设置为NULL的事实。通过将地址与NULL或nil进行比较来检查函数的地址 - 因此它的可用性。

参考