菜鳥教程——iOS動態(tài)庫與靜態(tài)庫 

一.簡介

庫是編程中常用的數(shù)據(jù)包,更加方便的共享代碼们镜,提高開發(fā)效率瑰步,增加程序健壯性和安全性,iOS中的庫可以分為動態(tài)庫和靜態(tài)庫绣檬,兩者的區(qū)別就是靜態(tài)庫在編譯時把二進制文件完整的拷貝的可執(zhí)行文件中足陨,多次使用會造成冗余,這無疑加重了程序的負荷河咽。而動態(tài)庫則不同钠右,在編譯的時候并不進行拷貝,而是在運行的時候系統(tǒng)動態(tài)加載到內(nèi)存忘蟹,也只會加載一次飒房,節(jié)省內(nèi)存搁凸,蘋果是不支持開發(fā)者自行創(chuàng)建動態(tài)庫并用于發(fā)布,這樣的項目是不會通過appleStore審核的狠毯,雖然iOS8蘋果開放了api接口支持動態(tài)加載動態(tài)庫护糖。

二.動態(tài)庫和靜態(tài)庫格式區(qū)別

動態(tài)庫: .dylib(現(xiàn)在一般為.tdb)和 .framework

靜態(tài)庫: .a和 .framework

三.創(chuàng)建動態(tài)庫和靜態(tài)庫的注意事項

1.架構

armv6|armv7|armv7s|arm64都是ARM處理器的指令集,這些指令集都是向下兼容的嚼松,例如armv7指令集兼容armv6嫡良,只是使用armv6的時候無法發(fā)揮出其性能,無法使用armv7的新特性献酗,從而會導致程序執(zhí)行效率沒那么高寝受。

還有兩個我們也很熟悉的指令集:i386|x86_64 是Mac處理器的指令集,i386是針對intel通用微處理器32架構的罕偎。x86_64是針對x86架構的64位處理器很澄。所以當使用iOS模擬器的時候會遇到i386|x86_64,iOS模擬器沒有arm指令集颜及。

模擬器:

iPhone4s-iPnone5:i386

iPhone5s-iPhone7 Plus:x86_64

真機:

arm64:iPhone5S| iPad Air| iPad mini2(iPad mini with Retina Display)

armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)

armv7:iPhone3GS|iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

armv6 設備: iPhone, iPhone2, iPhone3G, 第一代甩苛、第二代 iPod Touch(一般不需要去支持)

四.創(chuàng)建動態(tài)庫和靜態(tài)庫

1 ?.a靜態(tài)庫的制作

a).創(chuàng)建Xcode工程staticTest

創(chuàng)建好的工程如圖所示

b)添加方法


c)修改配置信息

我們需要把Build Active Architecture Only修改為NO,否則生成的靜態(tài)庫就只支持當前選擇設備的架構俏站。


(1)Architectures

Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies more than one architecture, the generated binary may contain object code for each of the specified architectures.

指定工程被編譯成可支持哪些指令集類型讯蒲,而支持的指令集越多,就會編譯出包含多個指令集代碼的數(shù)據(jù)包肄扎,對應生成二進制包就越大墨林,也就是ipa包會變大。

(2)Valid Architectures

Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on. If the resulting architecture list is empty, the target generates no binary.

限制可能被支持的指令集的范圍反浓,也就是Xcode編譯出來的二進制包類型最終從這些類型產(chǎn)生萌丈,而編譯出哪種指令集的包,將由Architectures與Valid Architectures(因此這個不能為空)的交集來確定雷则,例如:

比如辆雾,你的Valid Architectures設置的支持arm指令集版本有:armv7/armv7s/arm64,對應的Architectures設置的支持arm指令集版本有:armv7s月劈,這時Xcode只會生成一個armv7s指令集的二進制包度迂。

再比如:將Architectures支持arm指令集設置為:armv7,armv7s,對應的Valid Architectures的支持的指令集設置為:armv7s,arm64猜揪,那么此時惭墓,XCode生成二進制包所支持的指令集只有armv7s。


d).分別在Generic ios device 和真機而姐,模擬器上編譯程序腊凶,可以看到product文件由紅邊黑,右鍵找到文件。

可以看到模擬器和真機生成的.a 文件钧萍。

e).將兩個.a文件合并成一個.a文件褐缠,同時支持模擬器和真機。

我們可以使用終端命令來實現(xiàn)风瘦。命令格式:lipo -create 第一個.a文件的絕對路徑 第二個.a文件的絕對路徑 -output 最終的.a文件路徑:

然后我們可以調用.h和.a文件運行到真機和模擬器上队魏。

2? .framework靜態(tài)庫的制作

a).創(chuàng)建framework文件,創(chuàng)建后如圖:

b).創(chuàng)建類并定義方法万搔。

c).按照前面說的做相關配置胡桨,另外需要把自己用到的類從project拖拽到public里。

d).將Mach-O Type改為靜態(tài)瞬雹,這個默認是dynamic

e).分別編譯昧谊,可以看到.frameWork邊黑

f).右鍵打開,如圖

g).將每個Framework文件下包含的testFrameWork二進制文件挖炬,合并生成同時支持真機和模擬器的文件包揽浙,

?終端操作:lipo -create 第一個framework下二進制文件的絕對路徑 第二個framework下二進制文件的絕對路徑 -output ?最終的二進制文件路徑:?

h).此刻已經(jīng)完成庫創(chuàng)建,使用的時候將生成的test二進制文件替換原真機或模擬器文件夾中生成的二進制文件即可意敛。

注意:

如果靜態(tài)庫中有category類,則在使用靜態(tài)庫的項目配置中Other Linker Flags需要添加參數(shù)-ObjC或者-all_load膛虫。

如果創(chuàng)建的framework類中使用了.tbd草姻,則需要在實際項目中導入.tbd動態(tài)庫。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稍刀,一起剝皮案震驚了整個濱河市撩独,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌账月,老刑警劉巖综膀,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異局齿,居然都是意外死亡剧劝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門抓歼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讥此,“玉大人,你說我怎么就攤上這事谣妻√言” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵蹋半,是天一觀的道長他巨。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么染突? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任捻爷,我火速辦了婚禮,結果婚禮上觉痛,老公的妹妹穿的比我還像新娘役衡。我一直安慰自己,他們只是感情好薪棒,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布手蝎。 她就那樣靜靜地躺著,像睡著了一般俐芯。 火紅的嫁衣襯著肌膚如雪棵介。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天吧史,我揣著相機與錄音邮辽,去河邊找鬼。 笑死贸营,一個胖子當著我的面吹牛吨述,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钞脂,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼揣云,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冰啃?” 一聲冷哼從身側響起邓夕,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阎毅,沒想到半個月后焚刚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡扇调,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年矿咕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肃拜。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡痴腌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出燃领,到底是詐尸還是另有隱情士聪,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布猛蔽,位于F島的核電站剥悟,受9級特大地震影響灵寺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜区岗,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一略板、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慈缔,春花似錦叮称、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娱节,卻和暖如春挠蛉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肄满。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工谴古, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稠歉。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓掰担,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怒炸。 傳聞我的和親對象是個殘疾皇子恩敌,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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