日常開發(fā)中,別人的三方庫你肯定接觸不少,用的也不少。
來,說幾個聽聽:AFNetworking,Masonry,MJRefresh、FMDB。。。?
此處省略一萬字。。。
如果這些你都沒用過,那么你一定走的不是尋常路。我只想說:大神,帶帶我!
好了,不瞎BB了,要不然要被大家扔鞋子!
首先,我們還是來補充一下關于庫的知識?
庫是神馬?庫是一種代碼共享的方式。主要用于代碼重用和源碼隱藏,一般分為靜態(tài)庫和動態(tài)庫
靜態(tài)庫:鏈接時完整的拷貝到可執(zhí)行文件中,多次使用就有多次冗余拷貝。
動態(tài)庫:鏈接時不復制,程序運行時由系統(tǒng)動態(tài)加載到內存,供系統(tǒng)調用。系統(tǒng)只加載一次,多次使用,節(jié)省內存。
說了一坨,庫究竟長啥樣的呢?往下看!
.a、.framework、.dylib、.tbd,.bundle,它們就是庫,就長這個樣子的!
不過,現(xiàn)在是xcode8的時代,我們已經見不到.dylib了,取而代之的是.tbd
.tbd是個什么東東呢?稍后它們一一自我介紹你就知道了!現(xiàn)在,站隊!
站隊啦!站隊啦!
1 靜態(tài)庫隊:.a、.framework
2 動態(tài)庫隊:.framework、.dylib、.tbd
.bundle,發(fā)什么呆,你咋不站隊呢?
.bundle:好殤心,我既不是靜態(tài)庫,也不是動態(tài)庫,只是一個資源文件!
好,別殤心了,你先自由活動。。。 .bundle默默離了隊。。。
.framework,是不是找事?怎么站到兩個隊里去啦?
.framework:報告隊長,不是我的錯啊!我有時是靜態(tài)庫,有時是動態(tài)庫,這得看我后臺是誰了。大boss(蘋果iOS系統(tǒng))名下的就是動態(tài)庫,而那些小屌絲程序員制作的.framework就是靜態(tài)庫啦。。。
好,你歸隊吧!.dylib、.tbd你倆也出來自我介紹介紹吧。
.dylib搶先一步。。。。
.dylib:報告,我是動態(tài)庫。不過我活躍在xcode7之前,現(xiàn)在我轉入幕后工作了。不過可以通過以下步驟找到我喲:
1)點擊Link Binary With Libraries下方的“+”號,然后選擇”Add Other…”
2)按下command+shift+g"
3)輸入”/usr/lib”
然后你就能找到啦,想我的話可以經常去看看我噢!我就一直在那兒繼續(xù)為您服務。報告完畢!
.tbd:報告,我也是動態(tài)庫,我是跟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.
也就是說我.tbd是新的“基于文本的存根庫”,size更小。我可是一個新星,我都成了stackOverflow上面人們討論的話題啦!地址在下面:
http://stackoverflow.com/questions/31450690/why-xcode-7-shows-tbd-instead-of-dylib
.a,出列,你來介紹介紹自己吧。
.a:大家好!我是一個純二進制文件,.h是我的忠實搭檔,沒有.h,我是滿肚子的學問,倒不出來 。有時候,我還會找來我的好哥們.bundle,讓它幫我存點圖片、xib文件啥的,用的時候就直接管它要了,我哥們.bundle可好了!說完,.a默默轉身歸隊去了。
看看,.a多謙和,你們都要像它學習!
好吧,你們都自由活動吧!
.bundle呢?小樣,看到你了。剛才還殤心的不得了,這會都撩妹了!過來,該你表演了!
.bundle興沖沖的跑了過來。。。 (估計撩妹撩high了)
大家好,我是.bundle,我是一個資源文件,或者是目錄文件,什么.plist、.image、.xib、.txt、.db等,都能往我這里放,只要主人(應用程序)需要,隨時從我這里把它們取走,俺從來都是任勞任怨,車前馬后,聽主人調遣!over ! 隊長,還有事沒,沒事我就忙去了。。。
嗯,沒事了,去吧,小樣。。。。
.bundle:謝隊長 !
這小樣又興沖沖的一溜煙跑了。。。 又奔妹子去了。。。
最后,我來總結幾句:
庫是一種代碼共享的方式,有靜態(tài)庫和動態(tài)庫之分!靜態(tài)庫是哪里用到,就拷貝一份到哪里去,每次都得拷,麻煩不說,還占地方。動態(tài)庫就比較好了,加載一次,誰用誰來取,方便,占地少。在開發(fā)過程中,我們經常碰到的靜態(tài)庫就是.a、.framework,動態(tài)庫有系統(tǒng)的.framework、.dylib(xcode7之前)、.tbd(xcode7及以后)。.bundle呢,就是一個資源包,用來放圖片等資源文件的。
別人的庫用著很爽吧?在寫代碼的時候省不少事吧?那你有沒有想過自己也搞個庫啥的,為程序員的哥哥姐姐弟弟妹妹們謀點福利呢?
在隨后的文章里,我們就來逐一探討這些庫是怎么制作的。。。。