在實際開發(fā)的時候我們常常會對系統(tǒng)的版本進行判斷進而來適應不同的API或者開發(fā)情形僻爽。一般會在兩種情況下做系統(tǒng)版本判斷:
1,編譯期:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
//xcode baseSDK為7.0或者以上
#else
//xcode baseSDK為7.0以下的
#endif
編譯期的版本判斷是指在編譯代碼是XCode的sdk環(huán)境呛哟,這里就是指baseSDK的版本(xcode 5 是 IOS 7.0)叠荠,有一些在編譯的時候就可以區(qū)分的就用這個辦法區(qū)分版本,比如文字對齊的枚舉NSTextAligment(IOS6以后)和UITextAligment(IOS6以前) 這種枚舉類型 在編譯期的時候編譯期就會替換扫责,可以在代碼里用上面這種辦法保證你的代碼高版的的xcode下不出warning榛鼎,同時在低版本的xcode下也能編譯。
2鳖孤,運行時:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
//設備系統(tǒng)為IOS 7.0或者以上的
}else{
//設備系統(tǒng)為IOS 7.0以下的
}
運行時判斷版本用最普遍的就是應用需要適配低版本的IOS系統(tǒng)者娱。比如一個新API在IOS6以后才出現(xiàn),這種時候就要使用運行時的判斷方法苏揣。當運行在IOS8系統(tǒng)的時候黄鳍,調用新API。運行在IOS8以下系統(tǒng)的時候腿准,調用低版本替代的函數(shù)(可能是自己實現(xiàn)际起,可能是不處理)
如果app的代碼用了IOS6.0后出現(xiàn)的新API拾碌,代碼中區(qū)分版本的時候用了編譯期區(qū)分版本的方法。在有IOS 6.0 sdk的xcode環(huán)境下能編譯通過街望,但是當app運行在IOS6.0以下的系統(tǒng)校翔,并且調用到這個新API的時候會崩潰。因為IOS6.0以下的系統(tǒng)沒有這個API的聲明和實現(xiàn)灾前。 這種情況就應該用運行時判斷版本的辦法防症。