1.現(xiàn)有代碼中存在的判斷系統(tǒng)版本的宏定義如下:
#define IOS7_OR_LATER? ( [[[UIDevice currentDevice] systemVersion] compare:@"10.0"] != NSOrderedAscending )
這個(gè)問(wèn)題出在咐柜,系統(tǒng)提供的這個(gè)compare方法腌闯,是從字符串第一位開(kāi)始比較溺职,而不是轉(zhuǎn)成數(shù)字比較,當(dāng)然啦渺鹦,可以自定義自己的compare方法,那個(gè)暫不提。
打個(gè)比方:
NSLog(@"20.1和30.0比較結(jié)果:<%d>",[@"20.1" compare:@"30.0"] == NSOrderedAscending);
NSLog(@"20.1和100.1比較結(jié)果:<%d>",[@"20.1" compare:@"100.1"] == NSOrderedAscending);
輸出結(jié)果:
2017-01-18 21:49:59.874 iOS-HHZUniversal[84263:1082496] 20.1和30.0比較結(jié)果:<1>
2017-01-18 21:49:59.875 iOS-HHZUniversal[84263:1082496] 20.1和100.1比較結(jié)果:<0>
可以看到痊夭,輸出結(jié)果并不是我們所期望的,因?yàn)樽址谝晃槐容^完之后就出結(jié)果了脏里。
2.改為獲取系統(tǒng)版本后轉(zhuǎn)為float類(lèi)型再比較[[[UIDevice currentDevice] systemVersion] floatValue]她我,但是需要注意的是,發(fā)現(xiàn)有的項(xiàng)目組比較是這樣的:
[[[UIDevice currentDevice] systemVersion] floatValue] >= 10.2
這樣有個(gè)問(wèn)題是迫横,10.2在編譯器缺省是double類(lèi)型番舆,會(huì)導(dǎo)致某些情況下異常,比如:
NSLog(@"正常比較:");
NSLog(@"正常比較10.2>=10.2<%d>",10.2 >= 10.2);
NSLog(@"正常比較10.2<=10.2<%d>",10.2 <= 10.2);
NSLog(@"讀取系統(tǒng)版本比較:");
NSLog(@"系統(tǒng)版本>=10.2<%d>",[[[UIDevice currentDevice] systemVersion] floatValue] >= 10.2);
NSLog(@"系統(tǒng)版本<=10.2<%d>",[[[UIDevice currentDevice] systemVersion] floatValue] <= 10.2);
輸出結(jié)果:
2017-01-18 22:01:43.301 iOS-HHZUniversal[94914:1113619] 正常比較:
2017-01-18 22:01:43.302 iOS-HHZUniversal[94914:1113619] 正常比較10.2>=10.2<1>
2017-01-18 22:01:43.303 iOS-HHZUniversal[94914:1113619] 正常比較10.2<=10.2<1>
2017-01-18 22:01:43.303 iOS-HHZUniversal[94914:1113619] 讀取系統(tǒng)版本比較:
2017-01-18 22:01:43.304 iOS-HHZUniversal[94914:1113619] 系統(tǒng)版本>=10.2<0>
2017-01-18 22:01:43.304 iOS-HHZUniversal[94914:1113619] 系統(tǒng)版本<=10.2<1>
2017-01-18 22:01:43.351 iOS-HHZUniversal[94914:1113619] <網(wǎng)絡(luò)請(qǐng)求(加密前):1>
系統(tǒng)版本>=10.2居然是0矾踱,其實(shí)這就是精度問(wèn)題導(dǎo)致的恨狈,你可以發(fā)現(xiàn)實(shí)際是10.1999999xxxxxxxxx。
所以呛讲,需要給10.2顯示轉(zhuǎn)換為float禾怠。用下面方式比較即可:
[[[UIDevice currentDevice] systemVersion] floatValue] >= 10.2f