關于__IPHONE_OS_VERSION_MAX_ALLOWED和__IPHONE_OS_VERSION_MIN_REQUIRED
這兩個宏定義(預編譯宏)监婶,大多數(shù)人不太明白,下面是講解齿桃。
__IPHONE_OS_VERSION_MAX_ALLOWED 當前開發(fā)環(huán)境版本(當前開發(fā)環(huán)境的系統(tǒng)SDK版本)
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
// 當前開發(fā)環(huán)境版本在iOS8.0及以上則編譯此部分代碼
#else
// 如果低于iOS8.0則編譯此部分代碼
#endif
__IPHONE_OS_VERSION_MIN_REQUIRED 系統(tǒng)最低支持版本(也就是當前項目選擇的最低版本)
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0
// 如果選擇(iOS Deployment Target)的最低支持版本在iOS8.0及以上才可以使用
- (void)execute;
#endif
結論__IPHONE_OS_VERSION_MAX_ALLOWED 這個宏得到的是當前開發(fā)環(huán)境的系統(tǒng)SDK版本__IPHONE_OS_VERSION_MIN_REQUIRED 這個宏它是當前項目選擇的最低支持的版本
這兩個宏在開發(fā)時用處比較大惑惶,比如 根據(jù)不同的開發(fā)環(huán)境編譯不同的代碼
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
// 在 iOS10.0 及以上的開發(fā)環(huán)境 編譯此部分代碼
#else
// 在低于 iOS10.0 的開發(fā)環(huán)境 編譯此部分代碼
#endif
iOS 預編譯指令#if #ifdef #elif #else #endif #import #define的簡單使用
1、#if 編譯預處理中的條件命令, 相當于C語法中的if語句短纵,如果if后判斷為真則執(zhí)行if后面的代碼塊
2带污、#ifdef 判斷某個宏是否被定義, 若已定義, 執(zhí)行隨后的語句-注意只會判斷該宏是否定義,而不會具體判斷語句的正確性
3香到、#ifndef 與#ifdef相反, 判斷某個宏是否未被定義
4刮刑、#elif 若#if, #ifdef, #ifndef或前面的#elif條件不滿足, 則執(zhí)行#elif之后的語句, 相當于C語法中的else-if
5、#else 與#if, #ifdef, #ifndef對應, 若這些條件不滿足, 則執(zhí)行#else之后的語句, 相當于C語法中的else
6养渴、#endif #if, #ifdef, #ifndef這些條件命令的結束標志.
7、#if 與 #ifdef 的區(qū)別:#if是判斷后面的條件語句是否成立泛烙,#ifdef是判斷某個宏是否被定義過理卑。要區(qū)分開!
iOS常用的系統(tǒng)參數(shù)宏:
// 判斷是否是真機
#if TARGET_OS_IPHONE // 在這里一定不能使用#ifdef蔽氨,因為TARGET_OS_IPHONE無論在真機還是模擬器情況下都存在只不過 模擬器時值為0
#else
#endif
// 判斷是否是模擬器
#if TARGET_OS_SIMULATOR // 同上藐唠。"TARGET_IPHONE_SIMULATOR"已經(jīng)廢棄
#else
#endif
// 判斷手機系統(tǒng)版本
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
#else
#endif
// 規(guī)定只能在ios系統(tǒng)下運行
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED?? ??
// 規(guī)定運行支持的最小版本
? ? #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
? ? #else
? ? #endif
#endif
// 可以參照Availability.h 文件? 文件路徑 /Applications/Xcode8.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include 不同Xcode版本路徑略有差異
/**
??#define __IPHONE_2_0? ? ? 20000
??#define __IPHONE_2_1? ? ? 20100
??#define __IPHONE_2_2? ? ? 20200
??#define __IPHONE_3_0? ? ? 30000
??#define __IPHONE_3_1? ? ? 30100
?#define __IPHONE_3_2? ? ? 30200
?#define __IPHONE_4_0? ? ? 40000
?#define __IPHONE_4_1? ? ? 40100
?#define __IPHONE_4_2? ? ? 40200
?#define __IPHONE_4_3? ? ? 40300
?#define __IPHONE_5_0? ? ? 50000
?#define __IPHONE_5_1? ? ? 50100
?#define __IPHONE_6_0? ? ? 60000
?#define __IPHONE_6_1? ? ? 60100
?#define __IPHONE_7_0? ? ? 70000
?#define __IPHONE_7_1? ? ? 70100
??#define __IPHONE_8_0? ? ? 80000
?#define __IPHONE_8_1? ? ? 80100
?#define __IPHONE_8_2? ? ? 80200
?#define __IPHONE_8_3? ? ? 80300
?#define __IPHONE_8_4? ? ? 80400
?#define __IPHONE_9_0? ? ? 90000
?#define __IPHONE_9_1? ? ? 90100
?#define __IPHONE_9_2? ? ? 90200
?#define __IPHONE_9_3? ? ? 90300
?#define __IPHONE_10_0? ? 100000
?#define __IPHONE_10_1? ? 100100
??*/