关于适配低版本的设备
主要介绍了这两个宏
__IPHONE_OS_VERSION_MAX_ALLOWED
和__IPHONE_OS_VERSION_MIN_ALLOWED
只介绍了 一个宏的用法
__IPHONE_OS_VERSION_MAX_ALLOWED
这篇文章值得详细研究,基本上把适配低版本的内容讲完了
文章摘录
Deployment Target
指的是你的APP能支持的最低系统版本,如要支持iOS6以上,就设置成iOS6即可。Base SDK
指的是用来编译APP的SDK(Software Development Kit)的版本,一般保持当前XCode支持的最新的就好,如iOS8.4。SDK其实就是包含了所有的你要用到的头文件、链接库的集合,你的APP里面用的各种类、函数,能编译、链接成最后的安装包,就要靠它,苹果每次升级系统,新推出的各种API,也是在SDK里面。所以一般Base SDK肯定是大于等于Deployment Target的版本。
所以并不是说,能编译通过的,就一定能运行成功!还要在运行时检查!
- 宏只在编译时生效!
通俗易懂的说, 就是 只要是编译时通过的代码, 打包在 真机上运行时就一定会走这些代码, 比如, 一个app 编译的时候deployment target = 6.0 Base SDK = 8.0, 编译的时候走的都是8.0的方法,那么我们在真机系统为 iOS6.0的系统上运行的时候,就会走iOS8.0的方法, 那么一定会奔溃, iOS 系统是向下兼容的, iOS 6 中肯定不存在iOS 8 的方法,那么必须会奔溃啊.
编译时检查SDK版本,运行时检查系统版本
用到的宏如下:
-
__IPHONE_OS_VERSION_MAX_ALLOWED
: 值等于Base SDK,即用于检查SDK版本的。 -
__IPHONE_OS_VERSION_MIN_REQUIRED
: 值等于Deployment Target,检查支持的最小系统版本。
Weakly Linked - 运行时检查类、方法是否可用 (具体事例 看原文)
用Method Swizzling做兼容(这个先不去管, 找时间 和运行时一起研究)