(1)靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的存在形式
靜態(tài)庫(kù):?.a?和?.framework
動(dòng)態(tài)庫(kù): .dylib 和 .framework (最新的已經(jīng)是.tbd和.framework)
(2)靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)在使用上的區(qū)別
靜態(tài)庫(kù):鏈接時(shí)所灸,靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行文件中,?被多次使用就有多份冗余拷貝?
優(yōu)點(diǎn):
1.使自己的源碼不會(huì)簡(jiǎn)單的暴漏給別人,保密性很好息拜,但是在一個(gè)公司開(kāi)發(fā)項(xiàng)目的話(huà)养交,這樣不方便交流溝通件相。
2.當(dāng)需要使用靜態(tài)庫(kù)的時(shí)候蓄喇,只需要把相應(yīng)的.h文件和.a文件拷貝到工程中就好袒炉,不需要再將所有的源碼一一拷貝疙赠。這樣既加快了開(kāi)發(fā)流程付材,也不會(huì)使整個(gè)項(xiàng)目的壓縮包很大。
3.顯得也比源碼拷貝高端圃阳、大氣一些厌衔。
動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存捍岳,供程序調(diào)用富寿,系統(tǒng)只加載一次,多個(gè)程序共用锣夹,節(jié)省內(nèi)存
優(yōu)點(diǎn):
1.和靜態(tài)函數(shù)庫(kù)相比页徐,動(dòng)態(tài)函數(shù)庫(kù)在編譯的時(shí)候不會(huì)被編譯進(jìn)目標(biāo)代碼中,該函數(shù)庫(kù)里的相應(yīng)函數(shù)只有當(dāng)程序執(zhí)行到某些函數(shù)時(shí)才會(huì)被調(diào)用银萍,因此動(dòng)態(tài)函數(shù)庫(kù)所產(chǎn)生的可執(zhí)行文件并不會(huì)占用很大的內(nèi)存变勇。
2.由于函數(shù)庫(kù)沒(méi)有被整合進(jìn)自己的程序,而是在程序運(yùn)行時(shí)動(dòng)態(tài)的申請(qǐng)并調(diào)用贴唇,所以程序的運(yùn)行環(huán)境中必須提供相應(yīng)的庫(kù)搀绣。
3.動(dòng)態(tài)函數(shù)庫(kù)的改變并不影響你的程序飞袋,所以動(dòng)態(tài)函數(shù)庫(kù)的升級(jí)比較方便。
注意:
蘋(píng)果公司規(guī)定:如果項(xiàng)目中使用自己寫(xiě)的動(dòng)態(tài)庫(kù)豌熄,就不能上傳到AppStore
(3)制作過(guò)程
打開(kāi)安裝的Xcode授嘀,新建項(xiàng)目-> 選擇 “Cocoa Touch Static Library”
添加所需要的庫(kù)中包含的源代碼,add to target 中的方框記得勾選
在此锣险,本人選擇的是AFNetworking庫(kù)
選擇需要暴露出來(lái)的 .h 文件蹄皱, .m 文件會(huì)自動(dòng)編譯到 .a 文件中
從左側(cè)庫(kù)文件中選擇所有的.h文件,拖動(dòng)到右側(cè)public中
先選擇真機(jī)設(shè)備芯肤,然后然后 Command+B 編譯巷折,libAFNetworking.a的文件從紅色變?yōu)楹谏?/p>
選擇模擬器,依然 Command+B 崖咨,模擬器和真機(jī)環(huán)境下用的 .a 文件是分開(kāi)的锻拘,右擊 “Show In Finder” ,查看制作好的 .a 文件
Debug-iphoneos 文件夾里面的東西是用在真機(jī)上的
Debug-iphonesimulator?文件夾里面的東西是用在模擬器上的
如果 Scheme 是 Release 模式击蹲,生成的文件夾就以 Release 開(kāi)頭
(4)合并.a文件署拟,使得能同時(shí)用在真機(jī)和模擬器上
在終端輸入命令:
lipo -create Debug-iphoneos/libAFNetworking.a的根路徑 Debug-iphonesimulator/libAFNetworking.a的根路徑 -output
(5)使用 .a
如何使用?.a
直接將?.a?、?.h?歌豺、資源文件拖拽到其他項(xiàng)目中即可