关于__IPHONE_OS_VERSION_MAX_ALLOWED
和__IPHONE_OS_VERSION_MIN_REQUIRED
这两个宏定义(预编译宏),大多数人不太明白,下面分享给大家
__IPHONE_OS_VERSION_MAX_ALLOWED
当前开发环境版本(当前开发环境的系统SDK版本)
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
// 当前开发环境版本在iOS8.0及以上则编译此部分代码
#else
// 如果低于iOS8.0则编译此部分代码
#endif
⚠️注意:这里最好不要这样去判定一个方法或属性是否可用!此处在编译后已经确定是否包含此部分代码,因为它依赖的是当前的开发环境,而不是当前系统环境,它运行在编译时而不是运行时,所以经过打包后,此处就不会变了,在一些特殊情况下会造成严重问题!慎用!!
__IPHONE_OS_VERSION_MIN_REQUIRED
系统最低支持版本(也就是当前项目选择的最低版本)
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0
// 如果选择(iOS Deployment Target)的最低支持版本在iOS8.0及以上才可以使用
- (void)execute;
#endif
结论
__IPHONE_OS_VERSION_MAX_ALLOWED 这个宏得到的是当前开发环境的系统SDK版本
__IPHONE_OS_VERSION_MIN_REQUIRED 这个宏它是当前项目选择的最低支持的版本
这两个宏在开发时用处比较大,比如 根据不同的开发环境编译不同的代码
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
// 在 iOS10.0 及以上的开发环境 编译此部分代码
#else
// 在低于 iOS10.0 的开发环境 编译此部分代码
#endif
至于其他用法,自己摸索,只要记住两个宏代表的是什么版本就好了