在看大神寫的框架時, 看到使用的兩個宏, 分別 獲取app支持的最小版本 和 手機支持SDK的最大版本, 通過網(wǎng)上查找學(xué)習(xí), 再此記錄, 如有錯誤請留言, 我會抽空修改!
<br >
<p>__IPHONE_OS_VERSION_MIN_REQUIRED: 當(dāng)前app支持的最低版本, 即Deployment Target
- Xcode中位置在下圖中:
<p>__IPHONE_OS_VERSION_MAX_ALLOWED: 當(dāng)前SDK的最高版本, 在手機上, 就是該手機上支持的SDK最高版本
- Xcode中具體位置
使用方法
- __IPHONE_OS_VERSION_MIN_REQUIRED
<p>__IPHONE_OS_VERSION_MIN_REQUIRED: 開發(fā)時, 選中的最低版本, 如果在編譯時, 程序最低版本為iOS8, 那么__IPHONE_OS_VERSION_MIN_REQUIRED == 80000
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
// 代碼1
[UIView new];
#else
// 代碼2, 這里調(diào)用了不存在的方法
[UIView 不存在的方法];
#endif
我這里設(shè)置Deployment Target為iOS8, 即__IPHONE_OS_VERSION_MIN_REQUIRED == 80000
上面的代碼正常編譯, 并且永遠不會執(zhí)行代碼2, <a>所以永遠不會執(zhí)行不存在的方法</a>
這里會使用代碼1的方法, 而代碼2的方法并不會進入編譯, 所以不會報錯
__IPHONE_OS_VERSION_MAX_ALLOWED
<p> __IPHONE_OS_VERSION_MAX_ALLOWED: 開發(fā)時, 會獲取到當(dāng)前SDK的最高版本, 如果在手機上運行, 會獲取到當(dāng)前手機系統(tǒng)允許使用的SDK的最高版本
#if __IPHONE_OS_VERSION_MAX_ALLOWED > 100000
// 代碼1, 不存在的方法
[UIView 不存在的方法];
#else
// 代碼2
[UIView new];
#endif
- 我是用的是Xcode8, iOS10.0, SDK 版本是10.0
- 所以編譯的時候會使用代碼2, 而不會使用代碼1, 如果使用iOS10的手機也沒問題, 會正常運行
- 但是, 如果使用iOS10.0以上的任何手機運行, 比如iOS10.1的系統(tǒng), 那么SDK就是10.1的版本, 這里就會崩潰, <a>因為執(zhí)行不存在的方法, 會報方法不存在的錯誤</a>
最后
<p>在SDK的版本適配時, 可以使用__IPHONE_OS_VERSION_MAX_ALLOWED