一、SDK(Software Development Kit),開發(fā)中抽出特定統(tǒng)一的工具類、資源包、相關(guān)文檔、范例結(jié)合api調(diào)用等,實現(xiàn)模塊化/組件化的軟件開發(fā)包。
二、庫(Library),封裝好的代碼,加上頭文件供別人使用(一套SDK可以有多個類庫,一個類庫可以說自己實現(xiàn)了某個API)。
庫是已經(jīng)編譯好的二進制代碼,編譯的時候只需要 Link 一下,減少項目編譯時間。
三、庫分為靜態(tài)庫和動態(tài)庫
(一)、靜態(tài)庫:靜態(tài)鏈接庫(Windows下的 .lib,Linux和Mac下的 .a)。
靜態(tài)庫在編譯的時候會被直接拷貝一份,復(fù)制到目標程序里,這段代碼在目標程序里就不會再改變了。
優(yōu)點:編譯完成之后,庫文件實際上就沒有作用了。目標程序沒有外部依賴,直接就可以運行。
缺點:被多次使用就有多份冗余拷貝,會使目標程序的體積增大。
(二)、動態(tài)庫:動態(tài)鏈接庫(Windows下的 .dll,Linux下的 .so,Mac下的 .dylib/.tbd)。
動態(tài)庫在編譯時并不會被拷貝到目標程序中,目標程序中只會存儲指向動態(tài)庫的引用。等到程序運行時,動態(tài)庫才會被真正加載進來。
優(yōu)點:不需要拷貝到目標程序中,不會影響目標程序的體積,而且同一份庫可以被多個程序使用(因為這個原因,動態(tài)庫也被稱作共享庫)。同時,編譯時才載入內(nèi)存中的特性,也可以讓我們隨時對庫進行替換,而不需要重新編譯代碼。
缺點:動態(tài)載入會帶來一部分性能損失,使用動態(tài)庫也會使得程序依賴于外部環(huán)境。如果環(huán)境缺少動態(tài)庫或者庫的版本不正確,就會導(dǎo)致程序無法運行。
四、什么是framework
.framework 實際上是Cocoa/Cocoa Touch程序中使用的一種資源打包方式,將庫的二進制文件,頭文件和有關(guān)的資源文件打包到一起,方便管理和分發(fā)。
Mac OS/iOS 下:靜態(tài)庫:.a和.framework;動態(tài)庫:.dylib/.tbd 和.framework。
系統(tǒng)的.framework是動態(tài)庫,我們自己建立的.framework是靜態(tài)庫。
平時我們用的第三方SDK的framework都是靜態(tài)庫,真正的動態(tài)庫是上不了AppStore的。
五、 .a與.framework區(qū)別
.a是一個純二進制文件,.framework中除了有二進制文件之外還有資源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
六、靜態(tài)庫的開發(fā)理由
1、共享代碼,便于合理使用;
2、固定的業(yè)務(wù)模塊化;
3、分享你的代碼庫,不讓別人看到代碼的實現(xiàn);
4、開發(fā)第三方sdk的需要。
七、靜態(tài)庫開發(fā)的幾個方面:(可以實現(xiàn)在開發(fā)靜態(tài)庫的同時在主工程中查看代碼結(jié)果是否和預(yù)期一致)
1、主工程:可以實現(xiàn)直接測試靜態(tài)庫內(nèi)的各種模塊功能;
2、靜態(tài)庫:封裝自己的靜態(tài)庫,方便使用,使功能模塊化;
3、bundle資源包:把靜態(tài)庫中的資源文件封裝到bundle包中。資源文件包括圖片、storyboard,xib文件、plist文件以及mp3等;
4、aggregate:實現(xiàn)腳本合并靜態(tài)庫支持的設(shè)備(模擬器+手機),生成通用靜態(tài)庫。