『IOS概念性解說(shuō)』framework與.a

ios開(kāi)發(fā)中經(jīng)常會(huì)依賴framework和.a文件,這兩種文件有什么區(qū)別呢钥组?今天就聊聊這兩種文件格式。


動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)

在說(shuō)framework和.a文件之前,先明確一下什么是靜態(tài)庫(kù)匾乓,什么是動(dòng)態(tài)庫(kù)。

靜態(tài)庫(kù)

靜態(tài)庫(kù)即靜態(tài)鏈接庫(kù)又谋。靜態(tài)庫(kù)在編譯的時(shí)候會(huì)被直接拷貝一份拼缝,復(fù)制到目標(biāo)程序里,這段代碼在目標(biāo)程序里就相當(dāng)于寫(xiě)死了彰亥,不會(huì)發(fā)生什么改變了咧七。

  • 好處就是方便,放在工程中就能用任斋,編譯完成后继阻,跟這個(gè)庫(kù)文件就沒(méi)什么關(guān)系了。
  • 缺點(diǎn)就是目標(biāo)程序會(huì)增大废酷,拷貝了一份程序進(jìn)去瘟檩,能不增大嗎。

動(dòng)態(tài)庫(kù)

動(dòng)態(tài)庫(kù)在編譯時(shí)并不會(huì)被拷貝到目標(biāo)程序中澈蟆,目標(biāo)程序中只會(huì)存儲(chǔ)指向動(dòng)態(tài)庫(kù)的引用芒帕。等到程序運(yùn)行時(shí),動(dòng)態(tài)庫(kù)才會(huì)被真正加載進(jìn)來(lái)丰介。

  • 優(yōu)點(diǎn)是背蟆,不需要拷貝到目標(biāo)程序中,不會(huì)影響目標(biāo)程序的體積哮幢,而且同一份庫(kù)可以被多個(gè)程序使用带膀。同時(shí),隨時(shí)對(duì)庫(kù)進(jìn)行替換橙垢,而不需要重新編譯代碼垛叨。
  • 缺點(diǎn)是比較麻煩,經(jīng)常由于外因?qū)е轮赶虿徽_柜某,而出現(xiàn)錯(cuò)誤嗽元。同時(shí)也會(huì)造成一部分性能的損失。

framework與.a

framework

framework可以將庫(kù)的二進(jìn)制文件喂击,頭文件和有關(guān)的資源文件打包到一起剂癌,方便管理和分發(fā)。這個(gè)有點(diǎn)類似于Android的aar翰绊。
那framework屬于靜態(tài)庫(kù)呢還是動(dòng)態(tài)庫(kù)呢佩谷,這個(gè)應(yīng)該是都有的旁壮。系統(tǒng)提供的framework就是動(dòng)態(tài)的,比如UIKit.Framework谐檀。但是自己做的一般都是靜態(tài)的抡谐,方便使用。

.a

.a是一個(gè)純二進(jìn)制文件桐猬,有點(diǎn)像Android的jar麦撵,不能包含資源文件,而且.a文件不能直接使用需要有頭文件配合溃肪,這個(gè)很好理解厦坛,C開(kāi)發(fā)嘛,當(dāng)然需要頭文件乍惊,.a不能包含頭文件杜秸,所以需要手動(dòng)加入頭文件,所以這種方式是比較麻煩的润绎。

如何打包

framework

現(xiàn)在可以試著做一個(gè)framework


點(diǎn)擊這個(gè)按鈕

然后創(chuàng)建工程撬碟,如下圖所示:


修改一些配置信息,生成支持所有架構(gòu)的版本莉撇。

新建一對(duì)文件呢蛤,隨便寫(xiě)點(diǎn)東西:


配置可以暴露的文件,一般來(lái)說(shuō)頭文件需要暴露棍郎,這個(gè)有點(diǎn)類似于Android的混淆機(jī)制


然后編譯即可其障,注意編譯的時(shí)候選擇模擬器或者Generic iOS Device
編譯成功后,Products下的framework會(huì)由紅色變成黑色涂佃,就可以使用了:


但是查看文件夾的時(shí)候你會(huì)發(fā)現(xiàn)励翼,實(shí)際生成了兩個(gè)framework:


一個(gè)是針對(duì)模擬器的一個(gè)是針對(duì)真機(jī)的。
如果你想要一個(gè)通用版怎么辦呢辜荠?用命令行的方式解決吧汽抚!
在工程中,右鍵選擇生成的framework伯病,選擇show in finder:


找到這個(gè)文件 然后進(jìn)入終端:
輸入lipo -create 然后將上圖中的那個(gè)文件拖進(jìn)去造烁,這個(gè)文件應(yīng)該有兩個(gè),一個(gè)模擬器的一個(gè)真機(jī)的午笛。然后在上-output 加上輸出路徑惭蟋,如下圖所示:


這樣就會(huì)在文件夾下生成一個(gè).lipo文件(原諒我上圖中名字拼錯(cuò)了,哈哈)
然后將生成的文件替換之前模擬器或者真機(jī)中framework對(duì)應(yīng)的文件药磺,注意改名告组,保持一致:


然后這個(gè)framework就可以用了。

.a

前面說(shuō)了与涡,我們可以將.m文件封裝成.a,加上.h文件惹谐,也可以成為靜態(tài)庫(kù)文件。
這次選擇這個(gè):


然后隨便寫(xiě)點(diǎn)東西:


然后點(diǎn)擊運(yùn)行(注意跟上面一樣驼卖,一定要分別對(duì)模擬器和真機(jī)點(diǎn)擊運(yùn)行各一次)氨肌,這樣就生成了.a文件:


這個(gè)跟上面一樣,也會(huì)生成一個(gè)模擬器的.a文件酌畜,一個(gè)真機(jī)的.a文件怎囚。
還是用上面的命令lipo -create就可以合成通用的.a文件。

總結(jié)

與IOS庫(kù)相關(guān)的概念就介紹到這里桥胞。這篇文章代碼較少恳守,主要是用圖片對(duì)概念和方法進(jìn)行了介紹,希望能幫到初入IOS的同學(xué)贩虾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末催烘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缎罢,更是在濱河造成了極大的恐慌伊群,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件策精,死亡現(xiàn)場(chǎng)離奇詭異舰始,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)咽袜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門丸卷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人询刹,你說(shuō)我怎么就攤上這事谜嫉。” “怎么了凹联?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵骄恶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我匕垫,道長(zhǎng)僧鲁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任象泵,我火速辦了婚禮寞秃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偶惠。我一直安慰自己春寿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布忽孽。 她就那樣靜靜地躺著绑改,像睡著了一般谢床。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厘线,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天识腿,我揣著相機(jī)與錄音,去河邊找鬼造壮。 笑死渡讼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耳璧。 我是一名探鬼主播成箫,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼旨枯!你這毒婦竟也來(lái)了蹬昌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤攀隔,失蹤者是張志新(化名)和其女友劉穎凳厢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體竞慢,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡先紫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筹煮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遮精。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖败潦,靈堂內(nèi)的尸體忽然破棺而出本冲,到底是詐尸還是另有隱情,我是刑警寧澤劫扒,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布檬洞,位于F島的核電站,受9級(jí)特大地震影響沟饥,放射性物質(zhì)發(fā)生泄漏添怔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一贤旷、第九天 我趴在偏房一處隱蔽的房頂上張望广料。 院中可真熱鬧,春花似錦幼驶、人聲如沸艾杏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)购桑。三九已至畅铭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勃蜘,已是汗流浹背硕噩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留元旬,地道東北人榴徐。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓守问,卻偏偏與公主長(zhǎng)得像匀归,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耗帕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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