簡介
什么是庫?
庫是程序代碼的集合,是共享程序代碼的一種方式
根據(jù)源代碼的公開情況,庫可以分為?2?種類型
開源庫
公開源代碼,能看到具體實現(xiàn)
比如?SDWebImage?、?AFNetworking
閉源庫
不公開源代碼,是經(jīng)過編譯后的二進(jìn)制文件,看不到具體實現(xiàn)
主要分為:靜態(tài)庫、動態(tài)庫
靜態(tài)庫和動態(tài)庫
靜態(tài)庫和動態(tài)庫的存在形式
靜態(tài)庫:?.a?和?.framework
動態(tài)庫:?.dylib?和?.framework
靜態(tài)庫和動態(tài)庫在使用上的區(qū)別
靜態(tài)庫:鏈接時,靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中,?被多次使用就有多份冗余拷貝?(左圖所示)
動態(tài)庫:鏈接時不復(fù)制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個程序共用,節(jié)省內(nèi)存?(右圖所示)
需要注意的是:
項目中如果使用了自制的動態(tài)庫,不能被上傳到?AppStore
制作?.a
新建項目->?選擇?“Cocoa Touch Static Library”
添加庫需要包含的源代碼
將李明杰老師的刷新框架MJRefresh拖入工程
選擇需要暴露出來的?.h?文件,?.m?文件會自動編譯到?.a?文件中
選擇真機設(shè)備,然后?Command+B?編譯,?libMJRefresh.a?文件從紅色變?yōu)楹谏?/p>
選擇模擬器,依然?Command+B?,模擬器和真機環(huán)境下用的?.a?文件是分開的
右擊?“Show In Finder”?,查看制作好的?.a?文件
Debug-iphoneos?文件夾里面的東西是用在真機上的
Debug-iphonesimulator?文件夾里面的東西是用在模擬器上的
如果?Scheme?是?Release?模式,生成的文件夾就以?Release?開頭
如果想讓一個?.a?文件能同時用在真機和模擬器上,需要進(jìn)行合并
在終端輸入指令
1
lipo?-create?Debug-iphoneos/libMJRefresh.a?Debug-iphonesimulator/libMJRefresh.a?-output?libMJRefresh.a
.a?文件的體積(一般情況下)
真機用的?.a >?模擬器用的?.a
所合成?.a ==?真機用的?.a +?模擬器用的?.a
通過?lipo –info?libMJRefresh.a?可以查看?.a?的類型(模擬器還是真機)
使用?.a
如何使用?.a
直接將?.a?、?.h?、資源文件拖拽到其他項目中即可