SDK開發(fā)----基本理論介紹

一、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)庫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 1.靜態(tài)庫和動態(tài)庫有什么異同? 靜態(tài)庫:鏈接時完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝。利用靜態(tài)...
    Ly夢k閱讀 8,750評論 3 18
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,674評論 1 32
  • 如果你想將你開發(fā)的控件與別人分享,一種方法是直接提供源代碼文件。然而,這種方法并不是很優(yōu)雅。它會暴露所有的實現(xiàn)細節(jié)...
    小熱狗閱讀 3,615評論 3 9
  • 參考了以下幾篇文章(謝謝各位作者大大的內(nèi)容): http://www.itdecent.cn/p/155a3cfb...
    輝546閱讀 1,349評論 1 3
  • 這是我今天早上從早點鋪上聽聞到的故事,因為有意義,所以復(fù)述一遍。 早上七八點,正是早點鋪繁忙的時候。我亦如往常點了...
    化濁閱讀 277評論 0 0

友情鏈接更多精彩內(nèi)容