__IPHONE_OS_VERSION_MIN_REQUIRED 和 __IPHONE_OS_VERSION_MAX_ALLOWED

在看大神写的框架时, 看到使用的两个宏, 分别 获取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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容