關(guān)于適配低版本的設(shè)備
主要介紹了這兩個(gè)宏
__IPHONE_OS_VERSION_MAX_ALLOWED
和__IPHONE_OS_VERSION_MIN_ALLOWED
只介紹了 一個(gè)宏的用法
__IPHONE_OS_VERSION_MAX_ALLOWED
這篇文章值得詳細(xì)研究,基本上把適配低版本的內(nèi)容講完了
文章摘錄
Deployment Target
指的是你的APP能支持的最低系統(tǒng)版本,如要支持iOS6以上,就設(shè)置成iOS6即可。Base SDK
指的是用來編譯APP的SDK(Software Development Kit)的版本,一般保持當(dāng)前XCode支持的最新的就好,如iOS8.4。SDK其實(shí)就是包含了所有的你要用到的頭文件、鏈接庫的集合,你的APP里面用的各種類、函數(shù),能編譯、鏈接成最后的安裝包,就要靠它,蘋果每次升級系統(tǒng),新推出的各種API,也是在SDK里面。所以一般Base SDK肯定是大于等于Deployment Target的版本。
所以并不是說,能編譯通過的,就一定能運(yùn)行成功!還要在運(yùn)行時(shí)檢查!
- 宏只在編譯時(shí)生效!
通俗易懂的說, 就是 只要是編譯時(shí)通過的代碼, 打包在 真機(jī)上運(yùn)行時(shí)就一定會走這些代碼, 比如, 一個(gè)app 編譯的時(shí)候deployment target = 6.0 Base SDK = 8.0, 編譯的時(shí)候走的都是8.0的方法,那么我們在真機(jī)系統(tǒng)為 iOS6.0的系統(tǒng)上運(yùn)行的時(shí)候,就會走iOS8.0的方法, 那么一定會奔潰, iOS 系統(tǒng)是向下兼容的, iOS 6 中肯定不存在iOS 8 的方法,那么必須會奔潰啊.
編譯時(shí)檢查SDK版本,運(yùn)行時(shí)檢查系統(tǒng)版本
用到的宏如下:
-
__IPHONE_OS_VERSION_MAX_ALLOWED
: 值等于Base SDK,即用于檢查SDK版本的。 -
__IPHONE_OS_VERSION_MIN_REQUIRED
: 值等于Deployment Target,檢查支持的最小系統(tǒng)版本。
Weakly Linked - 運(yùn)行時(shí)檢查類、方法是否可用 (具體事例 看原文)
用Method Swizzling做兼容(這個(gè)先不去管, 找時(shí)間 和運(yùn)行時(shí)一起研究)