使用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进行比较来检查函数的地址 - 因此它的可用性。
参考