您的位置:首页 > 移动开发 > IOS开发

iOS10系统版本判断的吭,以及iOS10以上系统版本判断正确的方法

2016-10-19 16:56 337 查看
或许看到我这篇文章,很多人都会笑,网上一搜适配iOS 10的文章千万篇,我这是何必多此一举呢!其实我也是这样认为的。看完后,也许你就不会这样认为了。

我们知道从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连连,太烦了!

到这里就算差不多了,至于如何使用,那就太简单了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐