美文网首页
__IPHONE_OS_VERSION_MIN_REQUIRED

__IPHONE_OS_VERSION_MIN_REQUIRED

作者: 伯wen | 来源:发表于2016-11-17 12:03 被阅读760次
在看大神写的框架时, 看到使用的两个宏, 分别 获取app支持的最小版本 和 手机支持SDK的最大版本, 通过网上查找学习, 再此记录, 如有错误请留言, 我会抽空修改!

<br >
<p>__IPHONE_OS_VERSION_MIN_REQUIRED: 当前app支持的最低版本, 即Deployment Target

  • Xcode中位置在下图中:
图1.png
图2.png

<p>__IPHONE_OS_VERSION_MAX_ALLOWED: 当前SDK的最高版本, 在手机上, 就是该手机上支持的SDK最高版本

  • Xcode中具体位置
图.png

使用方法

  • __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

相关文章

网友评论

      本文标题:__IPHONE_OS_VERSION_MIN_REQUIRED

      本文链接:https://www.haomeiwen.com/subject/ewjdpttx.html