当我们工程中使用某一方法时,需要确保该方法有效,由于iOS SDK的版本是向上兼容的,高版肯定可以用低版本的SDK,而低版本则不能用高版本的SDK。这是就需要其他有效的方法来代替。
这样就有一个问题,就是如何知道使用的方法在不同版本的系统中是否有效,苹果官方提供了两种类型的判断。详细看官方SDK
一、判断Objective-C方法
例如检测UIImagePickerController类的availableCaptureModesForCameraDevice:方法是否有效:
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.
}
检测Objective-C属性是否有效可以通过对属性的getter方法名(即属性名)调用上面的方法。
二、判断C 函数
判断函数是否有效只要判断函数的地址是否为NULL。
例如:
if (CGColorCreateGenericCMYK != NULL) {
CGColorCreateGenericCMYK (0.1,0.5.0.0,1.0,0.1);
} else {
// Function is not available.
// Alternate code to create a color object with earlier technology
}
注意:检测C函数的有效性,要将它的地址明确的和NULL或者nil比较。不能通过对地址取反判断。
这里C函数的函数名就是该函数的地址,即&myFunction等价于myFunction。
检测外部常量或者通知是否有效需要明确的取地址(&const)与NULL或者nil比较,而不是简单的名称。