一、靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別
靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)是相對(duì)編譯期和運(yùn)行期的,在存在形式上,靜態(tài)庫(kù)是以 .a 和 .framework 形式存在秘案,動(dòng)態(tài)庫(kù)是以.dylib 和 .framework形式存在的;在使用上,鏈接時(shí)阱高,靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行文件中赚导,被多次使用就有多份冗余拷貝,而動(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)存寡夹。
二处面、關(guān)于靜態(tài)庫(kù)
靜態(tài)庫(kù)分為:真機(jī)—Debug(調(diào)試)版本、 真機(jī)—Release(發(fā)布)版本菩掏、模擬器—Debug版本魂角、模擬器—Release版本,開(kāi)發(fā)中一般都打包Release(發(fā)布)版本智绸,將真機(jī)和模擬器版本合并野揪,提供外界。剛開(kāi)始不明白這個(gè)瞧栗,然后使用的Debug版本生成點(diǎn)a文件斯稳,在項(xiàng)目中使用一直報(bào)錯(cuò)。
三迹恐、創(chuàng)建.a靜態(tài)庫(kù)
1挣惰、新建項(xiàng)目,點(diǎn)擊iOS—Framework&—Cocoa Touch Static Library
給工程命名stone-bleApi-1.7.8
2殴边、系統(tǒng)自動(dòng)生成以工程名命名的.h和.m文件憎茂,可自定義的在目錄下添加或刪除文件,注意目錄下Products文件夾有一個(gè).a文件為紅色锤岸,說(shuō)明文件并不存在竖幔。這里我們將系統(tǒng)生成的.h和.m文件刪除。
刪除自動(dòng)生成的.h和.m文件是偷,然后將已經(jīng)寫好的類拖進(jìn)來(lái)拳氢,如下圖所示:
3、點(diǎn)擊Xcode左上角蛋铆,選擇Edit Scheme馋评,Build Configuration下選擇Release,先注意檢查下面Release是否為NO:Yes表示只編譯選中模擬器設(shè)備對(duì)應(yīng)的架構(gòu)戒职,No則為編譯所有模擬器設(shè)備支持的cup架構(gòu)(Debug版本同理),選擇NO栗恩,然后分別在模擬器和真機(jī)下Command+B編譯一下,會(huì)看到Products文件夾下的.a文件變?yōu)楹谏@個(gè).a文件就是我們想要得到的靜態(tài)庫(kù)磕秤,這里會(huì)出現(xiàn)一個(gè)問(wèn)題你先編譯的模擬器會(huì)發(fā)現(xiàn).a依然是紅色乳乌,你需要模擬器和真機(jī)都編譯后.a才會(huì)變成黑色,這應(yīng)該是Xcode本身的問(wèn)題
4市咆、分別選用真機(jī)模式編譯和模擬器編譯
5汉操、找到編譯之后生成的.a文件,合并真機(jī)生成的.a文件和模擬器生成的.a文件蒙兰,在終端輸入以下命令行:lipo -create 模擬器.a文件的路徑 真機(jī).a文件的路徑 -output 合并后的保存路徑