日常開發(fā)中诊霹,別人的三方庫(kù)你肯定接觸不少羞延,用的也不少渣淳。
來(lái),說(shuō)幾個(gè)聽聽: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)見不到.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ò)袄凉埂餐济!我有時(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)都是任勞任怨乾忱,車前馬后,聽主人調(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ù)是怎么制作的敞映。较曼。。振愿。