很多系统方法都有版本支持的说明,所以对于支持多个系统版本,需要判断系统版本来执行方法。
比如:
+ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier NS_DEPRECATED(NSURLSESSION_AVAILABLE, 10_10, 7_0, 8_0, "Please use backgroundSessionConfigurationWithIdentifier: instead");
+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier NS_AVAILABLE(10_10, 8_0);
第一个方法只支持7-8版本,第二个8版本以后开始起用。
- 方法1:获取系统版本
NSString * systemVersion = [UIDevice currentDevice].systemVersion;
if (systemVersion.doubleValue >= 9.0) {
//针对 9.0 以上的iOS系统进行处理
}
else{
//针对 9.0 以下的iOS系统进行处理
}
- 方法2:通过Foundation框架版本号
if(NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_9_0) {
//针对 9.0 以上的iOS系统进行处理
}
else{
//针对 9.0 以下的iOS系统进行处理
}
- 方法3:根据特有的类判断
if (NSClassFromString(@"UNNotification")) {
// 存在这个类 iOS 10.0 以上系统的处理
} else {
// iOS 10.0 以下系统的处理
}
- 方法4:根据特有的方法进行判断
if ([UIFont respondsToSelector:@selector(preferredFontForTextStyle:compatibleWithTraitCollection:)]) {
// 存在这个方法 iOS 10.0 以上系统的处理
} else {
// iOS 10.0 以下系统的处理
}
方法3、4基本上是已经知道了类或者方法的系统支持版本再进行判断了,可用性不是很高。另外,为了防止警告,可能在判断里还需要加一些宏来去掉警告,参考:#pragma GCC diagnostic 编译器警告