美文网首页
__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