iOS靜態(tài)庫與動態(tài)庫?
- 靜態(tài)庫:程序在編譯時(shí)鏈接到可執(zhí)行目標(biāo)文件中,當(dāng)被多個(gè)程序使用時(shí)在系統(tǒng)中就有多份拷貝。
- 動態(tài)庫:鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,可多個(gè)程序共用,節(jié)省內(nèi)存。
- 靜態(tài)庫有
.a和. framework兩種形式存在, 動態(tài)庫有.dylib和.framework兩種形式。值得注意的是,兩種方式的庫都可以以.framework存在,如果是系統(tǒng)級別的像UIKit.framework、Foundation.framework、AVFoundation.framework等,這類都是系統(tǒng)的動態(tài)庫。在正常的開發(fā)過程中,用戶是無法使用動態(tài)庫的,考慮到安全性的問題吧蘋果是禁止我們開發(fā)者使用它,無法上架App Store。 - 區(qū)分一個(gè)
.framework是靜態(tài)庫還是動態(tài)庫: 可以直接使用命令行的方式, 用file命令查看
cd .../ABC.framework
file ABC
在第一行如果你看到類似[arm_v7:current ar archive],那就表明這是一個(gè)靜態(tài)庫,如果是Mach-O dynamically linked shared library x那就表明是一個(gè)動態(tài)庫。
-
.a文件是一個(gè)二進(jìn)制的文件,使用它的時(shí)候必須外在暴露.h文件配合使用,否者無法使用,而.framework除了二進(jìn)制文件外,還包含了一些資源文件,比如plist文件等,頭文件也包含在其中,可以直接使用。當(dāng)庫中使用到圖片資源時(shí),都會把它們放入到一個(gè)同名的.bundle文件中。.framework庫里面是不能直接包含圖片資源的,系統(tǒng)并不會去掃描里面的圖片資源,故無法加載顯示。 - 相對
.a比.framework在制作過程中繁瑣,暴露的.h頭文件會比較多,建議使用.framework體驗(yàn)會好些。