iOS 開發(fā)中的『庫』(一)

.framework是什么?怎么制作? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 談一談自己對動態(tài)庫和靜態(tài)庫的理解袋毙。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在項目中如何使用動態(tài)framework的APP?使用了動態(tài)framework的APP能上架AppStore嗎? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可以通過framework的方式實現(xiàn)app的熱修復(fù)嗎?


前言

最近發(fā)現(xiàn)很多人分不清 『.framework && .a 』、『動態(tài)庫 && 靜態(tài)庫』搂擦、『.tbd && .dylib』這幾個東西。甚至, 還有人一直以誤為 framework 就是動態(tài)庫Q罟铡祈餐!鑒于網(wǎng)上許多文章都表述的含糊不清,再加上很多文章都比較老了哄陶,所以今天寫點東西總結(jié)一下帆阳。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?首先,看文章之前屋吨,你稍微了解這么幾個東西:編譯過程蜒谤、內(nèi)存分區(qū)。下面開始至扰!


理論篇

動態(tài)庫VS.靜態(tài)庫

首先你得搞清楚,這兩個東西都是編譯好的二進制文件鳍徽。就是用法不同而已。為什么要分為動態(tài)和靜態(tài)兩種庫呢?先看下圖:

靜態(tài)庫


動態(tài)庫

我們可以很清楚的看到: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 對于靜態(tài)庫而言,在編譯鏈接的時候,會將靜態(tài)庫所有文件都添加到目標(biāo)app可執(zhí)行文件中,并在程序運行后,靜態(tài)庫app可執(zhí)行文件一起被加載到同一塊代碼區(qū)中敢课。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? app可執(zhí)行文件:這個目標(biāo)app可執(zhí)行文件就是ipa解壓縮后,再顯示的包內(nèi)容里面與app同名的文件阶祭。 ? ? ? ? ? ? ? ??

對于動態(tài)庫而言,在編譯鏈接的時候,只會將動態(tài)庫被引用的頭文件添加到目標(biāo)app可執(zhí)行文件,區(qū)別于靜態(tài)庫,動態(tài)庫是在程序運行的時候被添加另外一塊內(nèi)存區(qū)域。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?蘋果的官方文檔中有兩句對動態(tài)庫靜態(tài)庫的解釋 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?- A better approach is for an app to load code into its address space when it’s actually needed, either at launch time or at runtime. The type ofl ibrary that provides this flexibility is called dynamic library. ? ?- **動態(tài)庫**:可以在 **運行or啟動** 的時候加載到內(nèi)存中直秆,加載到一塊**獨立的于 app ** 的內(nèi)存地址中

-When an app is launched, the app’s code—which includes the code of the static libraries it was linked with—is loaded into the app’s address space.Applications with large executables suffer from slow launch times and large memory footprints ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?- **靜態(tài)庫**:當(dāng)程序在啟動的時候濒募,會將 app 的代碼(包括靜態(tài)庫的代碼)一起在加載到 app 所處的內(nèi)存地址上。相比于**靜態(tài)庫** 的方案圾结,使用**動態(tài)庫**將花費更多的啟動時間和內(nèi)存消耗萨咳。還會增加可執(zhí)行文件的大小。

舉個例子:假設(shè)UIKit編譯成靜態(tài)庫和動態(tài)庫的大小都看成1M,加載到內(nèi)存中花銷1s,現(xiàn)在有app1和app2兩個app疫稿。倘若使用靜態(tài)庫的方式,那么在app1啟動的時候,需要花銷2s同時內(nèi)存有2M分配給了app1,同樣的道理 加上app2的啟動時間和內(nèi)存消耗,采用靜態(tài)庫的方案,一共需要花銷4s啟動時間培他、4M內(nèi)存大小、4M安裝包大小遗座。那么換成動態(tài)庫的時候,對于啟動和app1可能花費一樣的時間,但是在啟動app2的時候,不用再加載UIKit動態(tài)庫了舀凛。減少了UIKit的重復(fù)使用問題,一共花銷3s啟動時間、3M內(nèi)存大小途蒋、4M安裝包大小猛遍。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?而很多app都會使用很多相同的庫,如UIKit、CFNetwork等号坡。所以,蘋果為了加快app啟動速度懊烤、減少內(nèi)存花銷、減少安裝包體積大小,采用了大量動態(tài)庫的形式來優(yōu)化系統(tǒng)宽堆。dyld的共享緩存:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腌紧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子畜隶,更是在濱河造成了極大的恐慌壁肋,老刑警劉巖号胚,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浸遗,居然都是意外死亡猫胁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門跛锌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弃秆,“玉大人,你說我怎么就攤上這事髓帽〔ぷ” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵氢卡,是天一觀的道長锈至。 經(jīng)常有香客問我,道長译秦,這世上最難降的妖魔是什么峡捡? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮筑悴,結(jié)果婚禮上们拙,老公的妹妹穿的比我還像新娘。我一直安慰自己阁吝,他們只是感情好砚婆,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著突勇,像睡著了一般装盯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甲馋,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天埂奈,我揣著相機與錄音,去河邊找鬼定躏。 笑死账磺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痊远。 我是一名探鬼主播垮抗,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碧聪!你這毒婦竟也來了冒版?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤矾削,失蹤者是張志新(化名)和其女友劉穎壤玫,沒想到半個月后豁护,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哼凯,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡欲间,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了断部。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猎贴。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蝴光,靈堂內(nèi)的尸體忽然破棺而出她渴,到底是詐尸還是另有隱情,我是刑警寧澤蔑祟,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布趁耗,位于F島的核電站,受9級特大地震影響疆虚,放射性物質(zhì)發(fā)生泄漏苛败。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一径簿、第九天 我趴在偏房一處隱蔽的房頂上張望罢屈。 院中可真熱鬧,春花似錦篇亭、人聲如沸缠捌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曼月。三九已至,卻和暖如春柔昼,著一層夾襖步出監(jiān)牢的瞬間哑芹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工岳锁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绩衷,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓激率,卻偏偏與公主長得像咳燕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乒躺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 因為這篇文章有些問題招盲,所以建議看完之后再看下iOS 開發(fā)中的『庫』(二)這篇文章 看文章之前,你可以看下下面幾個問...
    Damonwong閱讀 18,016評論 18 218
  • 靜態(tài)庫與動態(tài)庫的區(qū)別 首先來看什么是庫咆繁,庫(Library)說白了就是一段編譯好的二進制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 11,973評論 3 42
  • 僅以方便自己查閱記錄前言1.靜態(tài)庫和動態(tài)庫有什么異同顶籽?靜態(tài)庫:鏈接時完整地拷貝至可執(zhí)行文件中玩般,被多次使用就有多份冗...
    190CM閱讀 4,232評論 0 4
  • (一)那些愿意不斷學(xué)習(xí)進步的人,本身就具備了有趣的本質(zhì) 我們身邊總有少數(shù)有趣的人礼饱,他們點亮了我們的朋友圈坏为,...
    馨誠事享閱讀 437評論 2 5
  • 穿衣史也是我們的成長史的一部分匀伏。 我大學(xué)之前,很喜歡穿運動服蝴韭;大學(xué)之后走風(fēng)騷路線够颠,喜歡穿紅不戴綠;工作后開始走簡單...
    小說家郭大俠閱讀 141評論 0 1