__IPHONE_OS_VERSION_MIN_REQUIRED
2016-11-17 本文已影响760人
伯wen
在看大神写的框架时, 看到使用的两个宏, 分别 获取app支持的最小版本 和 手机支持SDK的最大版本, 通过网上查找学习, 再此记录, 如有错误请留言, 我会抽空修改!
<br >
<p>__IPHONE_OS_VERSION_MIN_REQUIRED: 当前app支持的最低版本, 即Deployment Target
- Xcode中位置在下图中:
图2.png
<p>__IPHONE_OS_VERSION_MAX_ALLOWED: 当前SDK的最高版本, 在手机上, 就是该手机上支持的SDK最高版本
- Xcode中具体位置
使用方法
- __IPHONE_OS_VERSION_MIN_REQUIRED
<p>__IPHONE_OS_VERSION_MIN_REQUIRED: 开发时, 选中的最低版本, 如果在编译时, 程序最低版本为iOS8, 那么__IPHONE_OS_VERSION_MIN_REQUIRED == 80000
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
// 代码1
[UIView new];
#else
// 代码2, 这里调用了不存在的方法
[UIView 不存在的方法];
#endif
-
我这里设置Deployment Target为iOS8, 即__IPHONE_OS_VERSION_MIN_REQUIRED == 80000
-
上面的代码正常编译, 并且永远不会执行代码2, <a>所以永远不会执行不存在的方法</a>
-
这里会使用代码1的方法, 而代码2的方法并不会进入编译, 所以不会报错
-
__IPHONE_OS_VERSION_MAX_ALLOWED
<p> __IPHONE_OS_VERSION_MAX_ALLOWED: 开发时, 会获取到当前SDK的最高版本, 如果在手机上运行, 会获取到当前手机系统允许使用的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的系统, 那么SDK就是10.1的版本, 这里就会崩溃, <a>因为执行不存在的方法, 会报方法不存在的错误</a>
最后
<p>在SDK的版本适配时, 可以使用__IPHONE_OS_VERSION_MAX_ALLOWED