日常開發(fā)中,別人的三方庫(kù)你肯定接觸不少,用的也不少。
來(lái),說(shuō)幾個(gè)聽(tīng)聽(tīng):AFNetworking,Masonry,MJRefresh、FMDB。。。?
此處省略一萬(wàn)字。。。
如果這些你都沒(méi)用過(guò),那么你一定走的不是尋常路。我只想說(shuō):大神,帶帶我!

好了,不瞎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è)樣子的!

不過(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ù)是怎么制作的。。。。