方法的系统适配

在实际的开发过程中,为了避免在不同的系统版本中报找不到方法的错误从而导致系统崩溃,我们常常需要对不同的版本进行适配,现总结常用的系统适配方法如下:

  • 方法一
 ```objc
    NSString *version = [UIDevice currentDevice].systemVersion;
   if (version.doubleValue >= 8.0) { // iOS系统版本 >= 8.0

}
```
得到系统版本号,然后与想要适配的版本号进行比对,决定执行哪个方法

  • 方法二
      NSString *version = [UIDevice currentDevice].systemVersion;
      if ([version compare:@"8.0"] != NSOrderedAscending) { // iOS系统版本 >= 8.0
    

}
与方法二类似,得到版本号后,调用compare方法与想要适配的版本号进行比对,返回结果有三种objc
NSOrderedAscending 升序(右边 > 左边)
NSOrderedSame 相等、相同
NSOrderedDescending 降序(右边 < 左边)
```
根据自己的需求,是想升序还是降续来决定需要进行比较的对象

  • 方法三

      if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_8_0) { // iOS系统版本 >= 8.0
    }
    

    比较NSFoundation的版本号

  • 方法四:

      if (NSClassFromString(@"UIAlertController")) { // iOS系统版本 >= 8.0
    

}
```
通过比较当前版本是否支持UIAlertController方法,来判断当前版本号

  • 方法五:
       if ([@"" respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { // iOS系统版本 >= 7.0
    

}

 当前对象是否实现了特定版本号的某些方法,从而实现版本适配。在方法判断的过程中一定要仔细辨认是类方法还是对象方法
```objc
  [@"jack" respondsToSelector:@selector(length)] // 判断是否有-length这个对象方法
  [@"jack" length]
  
  [NSString respondsToSelector:@selector(length)] // 判断是否有+length这个类方法
  [NSString length]
  
  [NSString instancesRespondToSelector:@selector(length)] // 判断是否有-length这个对象方法
  [@"" length]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容