iOS之動態(tài)庫和靜態(tài)庫的區(qū)別

一、什么是庫(framework)

庫是程序代碼的集合,是程序開發(fā)者與其他開發(fā)者之間進(jìn)行代碼共享的一種方式。

庫根據(jù)源代碼公開的情況可以:

  • 開源庫
    • 開源庫的源代碼可見,比如afnetworking。
  • 閉源庫
    • 閉源庫的源代碼不可見,是一段編譯好的二進(jìn)制代碼

閉源庫有根據(jù)相對編譯時(shí)和運(yùn)行時(shí):

  • 靜態(tài)庫
  • 動態(tài)庫

二、靜態(tài)庫和動態(tài)庫區(qū)別

1、格式上的區(qū)別:

靜態(tài)庫的格式:

  • .a
  • .framework

動態(tài)庫的格式:

  • .dylib
  • .framework

但是系統(tǒng)的.framework都是動態(tài)庫

2、時(shí)間上區(qū)別

靜態(tài)庫:

  • 編譯時(shí)會被拷貝到可執(zhí)行文件中

動態(tài)庫:

  • 運(yùn)行時(shí)由系統(tǒng)加載到內(nèi)存

3、使用上的區(qū)別:

靜態(tài)庫使用:

  • 在編譯時(shí)會被拷貝到可執(zhí)行文件中,使用多次就會被多次拷貝。

優(yōu)勢:

  • 編譯完成之后,這個(gè)靜態(tài)庫也就沒有什么作用了。

劣勢:

  • 增加了可執(zhí)行文件的體積

動態(tài)庫使用:

  • 在運(yùn)行時(shí)由系統(tǒng)加載到內(nèi)存,相同的動態(tài)庫只加載一次,供多個(gè)程序調(diào)用,節(jié)省內(nèi)存。

在iOS8之前,自定義的動態(tài)庫是不允許使用的。但是iOS8中,隨著extension的出現(xiàn),動態(tài)庫才開始有用武之地。

三、怎么區(qū)分動態(tài)庫和靜態(tài)庫

因?yàn)?a肯定是靜態(tài)庫,.dylib肯定是動態(tài)庫,所以區(qū)分主要針對.feamework形式

1、通過命令行指令進(jìn)行區(qū)分

  • cd xx.framework
  • file xx

xx為.framwork下的二進(jìn)制文件

  • 判斷:靜態(tài)庫包含“current ar archive random library”字樣. 動態(tài)庫包含“dynamically linked shared library”字樣

2、根據(jù)是否是系統(tǒng)的.framework

一般情況下:

  • 系統(tǒng)的.framework都是動態(tài)庫

  • 非系統(tǒng)的都是.framework都是靜態(tài)庫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容