一、ios
1》靜態庫:連接時完整地拷貝至可執行文件中,被屢次使用就有多分冗餘拷貝安全
動態庫:連接時不復制,程序運行時由系統動態庫加載到內存,供程序調用,系統只加載一次,多個程序公用,節省內存內存
2》靜態庫形式:.a .framework資源
3》ios動態庫形式:.dylib? .tbd .framework 全部.dylib和.tbd都屬於動態庫,.framework多是動態庫多是靜態庫源碼
4》framework爲麼既是靜態庫又是動態庫:系統的.framework是動態庫;咱們本身建的.framework是靜態庫io
5》.a和.framework的區別:編譯
?5.1》.a是一個純二進制文件;.framework除了有二進制文件還有資源文件打包
?5.2》.a不能直接使用,至少要有.h配合,.framework文件能夠直接使用 ?引用
? ? .a + .h + sourceFile =? .framework二進制
二、靜態庫的特色:
?1》使App二進制文件變大
?2》使用時,須要手動導入靜態庫依賴的其餘類庫
?3》導入靜態庫的應用能夠減小對外界的依賴,若是導入的是三方動態庫,動態庫找不到會崩掉,例如 lib not found
?4》靜態庫優勢,減小耦合性,靜態庫中不能包含其餘靜態庫,使用的時候要另外導入其依賴庫,最大限度的保證每個靜態庫都是獨立的,不會重複引用
三、動態庫特色:
動態庫:.dylib和.tbd結尾的都是動態庫
? 1》平時的系統庫都放在ios系統中,在打包應用程序的時候這些庫不會拷貝到程序中,當須要使用時會從ios系統中加載他們,所以,動態庫也被稱做共享庫。編譯時才載入的特性,能夠隨時對庫進行替換,而不須要從新編譯代碼
? 2》這些庫都是全部應用公用的
? 3》能夠包含靜態庫,也能自動link所須要的依賴庫
? 4》在導入動態庫的時候須要在Embedded Binaries中導入,否則會報錯:image not found
? 注意:咱們本身作的動態庫與系統動態庫的區別:本身作的動態庫須要embed進項目,也就是要拷貝到目標程序中,這就不太像動態庫的特性了,蘋果多是基於安全考慮的
?
Framework既能夠是靜態庫也能夠是動態庫,這取決於編譯成的Mach-O
四、爲何要用庫:
庫(Library)其實就是一段編譯好的的二進制代碼,加上頭文件就能夠供別人使用,通常兩種狀況須要編成庫:
1》代碼須要給別人使用,但不但願別人看見源碼,須要以庫的形式封裝,只暴露頭文件
2》對於某些改動不太大的代碼,例如不少大公司經常使用且不多變更的模塊都會編譯成庫 1:節省編譯時間。2:方便代碼管理
由於庫已是編譯好的二進制文件,因此編譯的時候只須要link一下便可
來源:本文爲第三方轉載,若有侵權請聯繫小編刪除。