一析珊、SDK(Software Development Kit)羡鸥,開發(fā)中抽出特定統(tǒng)一的工具類、資源包忠寻、相關(guān)文檔惧浴、范例結(jié)合api調(diào)用等,實(shí)現(xiàn)模塊化/組件化的軟件開發(fā)包奕剃。
二衷旅、庫(kù)(Library),封裝好的代碼纵朋,加上頭文件供別人使用(一套SDK可以有多個(gè)類庫(kù)柿顶,一個(gè)類庫(kù)可以說自己實(shí)現(xiàn)了某個(gè)API)。
庫(kù)是已經(jīng)編譯好的二進(jìn)制代碼操软,編譯的時(shí)候只需要 Link 一下嘁锯,減少項(xiàng)目編譯時(shí)間。
三聂薪、庫(kù)分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)
(一)猪钮、靜態(tài)庫(kù):靜態(tài)鏈接庫(kù)(Windows下的 .lib,Linux和Mac下的 .a)胆建。
靜態(tài)庫(kù)在編譯的時(shí)候會(huì)被直接拷貝一份烤低,復(fù)制到目標(biāo)程序里,這段代碼在目標(biāo)程序里就不會(huì)再改變了笆载。
優(yōu)點(diǎn):編譯完成之后扑馁,庫(kù)文件實(shí)際上就沒有作用了涯呻。目標(biāo)程序沒有外部依賴,直接就可以運(yùn)行腻要。
缺點(diǎn):被多次使用就有多份冗余拷貝复罐,會(huì)使目標(biāo)程序的體積增大。
(二)雄家、動(dòng)態(tài)庫(kù):動(dòng)態(tài)鏈接庫(kù)(Windows下的 .dll效诅,Linux下的 .so,Mac下的 .dylib/.tbd)趟济。
動(dòng)態(tài)庫(kù)在編譯時(shí)并不會(huì)被拷貝到目標(biāo)程序中乱投,目標(biāo)程序中只會(huì)存儲(chǔ)指向動(dòng)態(tài)庫(kù)的引用。等到程序運(yùn)行時(shí)顷编,動(dòng)態(tài)庫(kù)才會(huì)被真正加載進(jìn)來戚炫。
優(yōu)點(diǎn):不需要拷貝到目標(biāo)程序中,不會(huì)影響目標(biāo)程序的體積媳纬,而且同一份庫(kù)可以被多個(gè)程序使用(因?yàn)檫@個(gè)原因双肤,動(dòng)態(tài)庫(kù)也被稱作共享庫(kù))。同時(shí)钮惠,編譯時(shí)才載入內(nèi)存中的特性茅糜,也可以讓我們隨時(shí)對(duì)庫(kù)進(jìn)行替換,而不需要重新編譯代碼素挽。
缺點(diǎn):動(dòng)態(tài)載入會(huì)帶來一部分性能損失限匣,使用動(dòng)態(tài)庫(kù)也會(huì)使得程序依賴于外部環(huán)境。如果環(huán)境缺少動(dòng)態(tài)庫(kù)或者庫(kù)的版本不正確毁菱,就會(huì)導(dǎo)致程序無(wú)法運(yùn)行米死。
四、什么是framework
.framework 實(shí)際上是Cocoa/Cocoa Touch程序中使用的一種資源打包方式贮庞,將庫(kù)的二進(jìn)制文件峦筒,頭文件和有關(guān)的資源文件打包到一起,方便管理和分發(fā)窗慎。
Mac OS/iOS 下:靜態(tài)庫(kù):.a和.framework物喷;動(dòng)態(tài)庫(kù):.dylib/.tbd 和.framework。
系統(tǒng)的.framework是動(dòng)態(tài)庫(kù)遮斥,我們自己建立的.framework是靜態(tài)庫(kù)峦失。
平時(shí)我們用的第三方SDK的framework都是靜態(tài)庫(kù),真正的動(dòng)態(tài)庫(kù)是上不了AppStore的术吗。
五尉辑、 .a與.framework區(qū)別
.a是一個(gè)純二進(jìn)制文件,.framework中除了有二進(jìn)制文件之外還有資源文件较屿。
.a文件不能直接使用隧魄,至少要有.h文件配合卓练,.framework文件可以直接使用。
.a + .h + sourceFile = .framework购啄。
六襟企、靜態(tài)庫(kù)的開發(fā)理由
1、共享代碼狮含,便于合理使用顽悼;
2、固定的業(yè)務(wù)模塊化几迄;
3蔚龙、分享你的代碼庫(kù),不讓別人看到代碼的實(shí)現(xiàn)乓旗;
4府蛇、開發(fā)第三方sdk的需要集索。
七屿愚、靜態(tài)庫(kù)開發(fā)的幾個(gè)方面:(可以實(shí)現(xiàn)在開發(fā)靜態(tài)庫(kù)的同時(shí)在主工程中查看代碼結(jié)果是否和預(yù)期一致)
1、主工程:可以實(shí)現(xiàn)直接測(cè)試靜態(tài)庫(kù)內(nèi)的各種模塊功能务荆;
2妆距、靜態(tài)庫(kù):封裝自己的靜態(tài)庫(kù),方便使用函匕,使功能模塊化娱据;
3、bundle資源包:把靜態(tài)庫(kù)中的資源文件封裝到bundle包中盅惜。資源文件包括圖片中剩、storyboard,xib文件抒寂、plist文件以及mp3等;
4结啼、aggregate:實(shí)現(xiàn)腳本合并靜態(tài)庫(kù)支持的設(shè)備(模擬器+手機(jī)),生成通用靜態(tài)庫(kù)屈芜。