.a、.framework庫(kù)制作之一(概覽)

日常開發(fā)中,別人的三方庫(kù)你肯定接觸不少,用的也不少。

來(lái),說(shuō)幾個(gè)聽(tīng)聽(tīng):AFNetworking,Masonry,MJRefresh、FMDB。。。?

此處省略一萬(wàn)字。。。

如果這些你都沒(méi)用過(guò),那么你一定走的不是尋常路。我只想說(shuō):大神,帶帶我!


gaga

好了,不瞎BB了,要不然要被大家扔鞋子!

首先,我們還是來(lái)補(bǔ)充一下關(guān)于庫(kù)的知識(shí)?

庫(kù)是神馬?庫(kù)是一種代碼共享的方式。主要用于代碼重用和源碼隱藏,一般分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

靜態(tài)庫(kù):鏈接時(shí)完整的拷貝到可執(zhí)行文件中,多次使用就有多次冗余拷貝。

動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供系統(tǒng)調(diào)用。系統(tǒng)只加載一次,多次使用,節(jié)省內(nèi)存。

說(shuō)了一坨,庫(kù)究竟長(zhǎng)啥樣的呢?往下看!

.a、.framework、.dylib、.tbd,.bundle,它們就是庫(kù),就長(zhǎng)這個(gè)樣子的!


庫(kù)的全家福

不過(guò),現(xiàn)在是xcode8的時(shí)代,我們已經(jīng)見(jiàn)不到.dylib了,取而代之的是.tbd

.tbd是個(gè)什么東東呢?稍后它們一一自我介紹你就知道了!現(xiàn)在,站隊(duì)!

站隊(duì)啦!站隊(duì)啦!

1 靜態(tài)庫(kù)隊(duì):.a、.framework

2 動(dòng)態(tài)庫(kù)隊(duì):.framework、.dylib、.tbd

.bundle,發(fā)什么呆,你咋不站隊(duì)呢?

.bundle:好殤心,我既不是靜態(tài)庫(kù),也不是動(dòng)態(tài)庫(kù),只是一個(gè)資源文件!

好,別殤心了,你先自由活動(dòng)。。。 .bundle默默離了隊(duì)。。。

.framework,是不是找事?怎么站到兩個(gè)隊(duì)里去啦?

.framework:報(bào)告隊(duì)長(zhǎng),不是我的錯(cuò)?。∥矣袝r(shí)是靜態(tài)庫(kù),有時(shí)是動(dòng)態(tài)庫(kù),這得看我后臺(tái)是誰(shuí)了。大boss(蘋果iOS系統(tǒng))名下的就是動(dòng)態(tài)庫(kù),而那些小屌絲程序員制作的.framework就是靜態(tài)庫(kù)啦。。。

好,你歸隊(duì)吧!.dylib、.tbd你倆也出來(lái)自我介紹介紹吧。

.dylib搶先一步。。。。

.dylib:報(bào)告,我是動(dòng)態(tài)庫(kù)。不過(guò)我活躍在xcode7之前,現(xiàn)在我轉(zhuǎn)入幕后工作了。不過(guò)可以通過(guò)以下步驟找到我喲:

1)點(diǎn)擊Link Binary With Libraries下方的“+”號(hào),然后選擇”Add Other…”

2)按下command+shift+g"

3)輸入”/usr/lib”

然后你就能找到啦,想我的話可以經(jīng)常去看看我噢!我就一直在那兒繼續(xù)為您服務(wù)。報(bào)告完畢!

.tbd:報(bào)告,我也是動(dòng)態(tài)庫(kù),我是跟xcode7一塊誕生的。這里apple forfum有提到我的:

For those who are curious, the .tbd files are new "text-based stub libraries", that provide a much more compact version of the stub libraries for use in the SDK, and help to significantly reduce its download size.

也就是說(shuō)我.tbd是新的“基于文本的存根庫(kù)”,size更小。我可是一個(gè)新星,我都成了stackOverflow上面人們討論的話題啦!地址在下面:

http://stackoverflow.com/questions/31450690/why-xcode-7-shows-tbd-instead-of-dylib

.a,出列,你來(lái)介紹介紹自己吧。

.a:大家好!我是一個(gè)純二進(jìn)制文件,.h是我的忠實(shí)搭檔,沒(méi)有.h,我是滿肚子的學(xué)問(wèn),倒不出來(lái) 。有時(shí)候,我還會(huì)找來(lái)我的好哥們.bundle,讓它幫我存點(diǎn)圖片、xib文件啥的,用的時(shí)候就直接管它要了,我哥們.bundle可好了!說(shuō)完,.a默默轉(zhuǎn)身歸隊(duì)去了。

看看,.a多謙和,你們都要像它學(xué)習(xí)!

好吧,你們都自由活動(dòng)吧!

.bundle呢?小樣,看到你了。剛才還殤心的不得了,這會(huì)都撩妹了!過(guò)來(lái),該你表演了!

.bundle興沖沖的跑了過(guò)來(lái)。。。 (估計(jì)撩妹撩high了)

大家好,我是.bundle,我是一個(gè)資源文件,或者是目錄文件,什么.plist、.image、.xib、.txt、.db等,都能往我這里放,只要主人(應(yīng)用程序)需要,隨時(shí)從我這里把它們?nèi)∽撸硰膩?lái)都是任勞任怨,車前馬后,聽(tīng)主人調(diào)遣!over ! 隊(duì)長(zhǎng),還有事沒(méi),沒(méi)事我就忙去了。。。

嗯,沒(méi)事了,去吧,小樣。。。。

.bundle:謝隊(duì)長(zhǎng) !

這小樣又興沖沖的一溜煙跑了。。。 又奔妹子去了。。。

最后,我來(lái)總結(jié)幾句:

庫(kù)是一種代碼共享的方式,有靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)之分!靜態(tài)庫(kù)是哪里用到,就拷貝一份到哪里去,每次都得拷,麻煩不說(shuō),還占地方。動(dòng)態(tài)庫(kù)就比較好了,加載一次,誰(shuí)用誰(shuí)來(lái)取,方便,占地少。在開發(fā)過(guò)程中,我們經(jīng)常碰到的靜態(tài)庫(kù)就是.a、.framework,動(dòng)態(tài)庫(kù)有系統(tǒng)的.framework、.dylib(xcode7之前)、.tbd(xcode7及以后)。.bundle呢,就是一個(gè)資源包,用來(lái)放圖片等資源文件的。

別人的庫(kù)用著很爽吧?在寫代碼的時(shí)候省不少事吧?那你有沒(méi)有想過(guò)自己也搞個(gè)庫(kù)啥的,為程序員的哥哥姐姐弟弟妹妹們謀點(diǎn)福利呢?


在隨后的文章里,我們就來(lái)逐一探討這些庫(kù)是怎么制作的。。。。

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

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

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