iOS10系统版本判断的吭,以及iOS10以上系统版本判断正确的方法
2016-10-19 16:56
337 查看
或许看到我这篇文章,很多人都会笑,网上一搜适配iOS 10的文章千万篇,我这是何必多此一举呢!其实我也是这样认为的。看完后,也许你就不会这样认为了。
我们知道从iOS 10开始,app判断系统的方法变了。
iOS10以前的方法是(判断大于iOS8的系统):
我通过这样的方法判断是不是大于10系统的方法时,遇到了一大坑(判断时并没有看苹果SDK中的宏定义),是这样判断的:
按正常的逻辑这样判断是完全正确的,其实我们知道判断系统版本的宏定义都是从低版本到高版本递增的double型(其实这样认为是错误的,因为到iOS 10以后,版本号变小了)
到SDK中查看从iOS_4_0(751.32) 到 iOS_9_4(1280.25)是递增的:
而从iOS10_0(397.40)开始的版本号是这样的:
上面我判断iOS 10以上版本的方法根本不对的,也就是说当我的手机系统版本是iOS8(1140.11),1140.11>= 397.40 这是成立的,也就是IOS_VERSION_10的值是YES。其实版本根本不大于iOS 10,针对iOS 10新特性的内容而低版本系统没有得API,这样就很容易引起系统崩溃(所以千万要小心了)。
下面提供一个个人判断大于iOS 10系统的方法(只判断到iOS 10_6_X,因为判断范围太大的时候会和小于iOS 10版本号冲突):
#define IOS_VERSION_10 (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_9_x_Max)?(YES):(NO)
我自己也觉得这样的文章太低级了,但还是希望朋友们使用版本判断的时候小心点,否则bug连连,太烦了!
到这里就算差不多了,至于如何使用,那就太简单了。
我们知道从iOS 10开始,app判断系统的方法变了。
iOS10以前的方法是(判断大于iOS8的系统):
#define IS_IOS_8 (([[[[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."] objectAtIndex:0] intValue] >= 8) ? YES : NO)iOS10以后:这样判断:
#define IS_IOS_8 (NSFoundationVersionNumber>=NSFoundationVersionNumber_iOS_8_0? YES : NO)
我通过这样的方法判断是不是大于10系统的方法时,遇到了一大坑(判断时并没有看苹果SDK中的宏定义),是这样判断的:
#define IOS_VERSION_10 (NSFoundationVersionNumber >= NSFoundationVersionNumber10_0)?YES:NO
按正常的逻辑这样判断是完全正确的,其实我们知道判断系统版本的宏定义都是从低版本到高版本递增的double型(其实这样认为是错误的,因为到iOS 10以后,版本号变小了)
到SDK中查看从iOS_4_0(751.32) 到 iOS_9_4(1280.25)是递增的:
#define NSFoundationVersionNumber_iOS_4_0 751.32 #define NSFoundationVersionNumber_iOS_4_1 751.37 #define NSFoundationVersionNumber_iOS_4_2 751.49 #define NSFoundationVersionNumber_iOS_4_3 751.49 #define NSFoundationVersionNumber_iOS_5_0 881.00 #define NSFoundationVersionNumber_iOS_5_1 890.10 #define NSFoundationVersionNumber_iOS_6_0 992.00 #define NSFoundationVersionNumber_iOS_6_1 993.00 #define NSFoundationVersionNumber_iOS_7_0 1047.20 #define NSFoundationVersionNumber_iOS_7_1 1047.25 #define NSFoundationVersionNumber_iOS_8_0 1140.11 #define NSFoundationVersionNumber_iOS_8_1 1141.1 #define NSFoundationVersionNumber_iOS_8_2 1142.14 #define NSFoundationVersionNumber_iOS_8_3 1144.17 #define NSFoundationVersionNumber_iOS_8_4 1144.17 #define NSFoundationVersionNumber_iOS_8_x_Max 1199 #define NSFoundationVersionNumber_iOS_9_0 1240.1 #define NSFoundationVersionNumber_iOS_9_1 1241.14 #define NSFoundationVersionNumber_iOS_9_2 1242.12 #define NSFoundationVersionNumber_iOS_9_3 1242.12 #define NSFoundationVersionNumber_iOS_9_4 1280.25
而从iOS10_0(397.40)开始的版本号是这样的:
#define NSFoundationVersionNumber10_0 397.40 #define NSFoundationVersionNumber10_1 425.00只贴出部分来,其实大家一看就明白了。
上面我判断iOS 10以上版本的方法根本不对的,也就是说当我的手机系统版本是iOS8(1140.11),1140.11>= 397.40 这是成立的,也就是IOS_VERSION_10的值是YES。其实版本根本不大于iOS 10,针对iOS 10新特性的内容而低版本系统没有得API,这样就很容易引起系统崩溃(所以千万要小心了)。
下面提供一个个人判断大于iOS 10系统的方法(只判断到iOS 10_6_X,因为判断范围太大的时候会和小于iOS 10版本号冲突):
#define IOS_VERSION_10 (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_9_x_Max)?(YES):(NO)
我自己也觉得这样的文章太低级了,但还是希望朋友们使用版本判断的时候小心点,否则bug连连,太烦了!
到这里就算差不多了,至于如何使用,那就太简单了。
相关文章推荐
- php判断字符以及字符串的包含方法属性
- 判断JavaScript对象是否可用的最正确方法分析
- php判断字符以及字符串的包含方法属性
- applet 签名以及在网页运行时判断是否正常加载的简单方法
- android 获取路径目录方法以及判断目录是否存在,创建目录 (转)
- 匆匆的一瞥,错过了一份正确的BIOS……,安装X64系统时错刷BIOS的彻底死机过程以及解决方法
- c#创建xml读取xml方法并判断文件目录以及文件是否存在
- @V@ java代码笔记2010-06-12:java控制台输入各类型类实现;以及判断输入字符串里面是否有数字的两种方法:方法1:转换成字符数组;方法2:正则表达式。
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- android 获取路径目录方法以及判断目录是否存在,创建目录
- 判断JavaScript对象是否可用的正确方法
- 判断身份证号码是否正确javascript、asp两种验证方法
- VC程序里判断系统是64位还是32位的正确方法.
- iphone开发 判断系统版本方法
- android 获取路径目录方法以及判断目录是否存在,创建目录
- 判断JavaScript对象是否可用的最正确方法分析
- 如何判断webbrowser里的网页下载完成,正确的版本和方法
- js关于输入内容是否为空,以及输入数字,时间,长短是否正确的判断
- VC程序里判断系统是64位还是32位的正确方法
- 区别对待 【找到问题发生的原因】 以及 【关于这个问题的 「正确可行」 的解决方法】