iOS中的動態庫,靜態庫和framework介紹

一、什麼是庫

首先來看什麼是庫,庫(Library)說白了就是一段編譯好的二進制代碼,加上頭文件就能夠供別人使用。ios

何時咱們會用到庫呢?工具

  1. 一種狀況是某些代碼須要給別人使用,可是咱們不但願別人看到源碼,就須要以庫的形式進行封裝,只暴露出頭文件。 (一些引入的第三方庫)
  2. 對於某些不會進行大的改動的代碼,咱們想減小編譯的時間,就能夠把它打包成庫,由於庫是已經編譯好的二進制了,編譯的時候只須要 Link 一下,不會浪費編譯時間。 (一些比較穩定的工具類,或者很穩定的功能模塊)

二、概念介紹

動態庫,靜態庫,framework 其實不是一個維度上。組件化

一、framework

framework並非庫,它只是一種打包方式,它既能夠是動態庫也能夠是靜態庫。將庫的二進制文件,頭文件和有關的資源文件打包到一塊兒,方便管理和分發,和靜態庫動態庫的本質是沒有什麼關係。性能

二、靜態庫

靜態庫 (靜態連接庫) 以.a 和 .framework 結尾 。 只因此叫靜態庫在編譯的時候會被直接拷貝一份,複製到目標程序裏,這段代碼在程序裏就不會在改變進程

優勢:編譯完成以後,庫文件沒有做用了,目標沒有外部依賴,直接能夠運行資源

缺點: 會是目標體積增大get

三、動態庫

動態庫(動態連接庫) 以 .dylib 或者 .framework 後綴結尾 與靜態庫相反,動態庫在編譯時並不會被拷貝到目標程序中,目標程序中只會存儲指向動態庫的引用。等到程序運行時,動態庫纔會被真正加載進來。源碼

優勢:不會影響目標程序的體積,並且同一份庫能夠被多個程序使用(由於這個緣由,動態庫也被稱做共享庫)。同時,運行時才載入的特性,也可讓咱們隨時對庫進行替換,而不須要從新編譯代碼。it

缺點: 動態載入會帶來一部分性能損失,使用動態庫也會使得程序依賴於外部環境。若是環境缺乏動態庫或者庫的版本不正確,就會致使程序沒法運行(Linux 下喜聞樂見的 lib not found 錯誤)。io

3 ios 常見的幾種庫

系統動態庫 Dynamic Framework

系統提供的 framework 都是動態庫,好比 UIKit.framework,具備全部動態庫的特性。

用戶動態庫 Embedded Framework

用戶能夠製做的「動態庫」,它是受到 iOS 平臺限制(簽名機制和沙盒機制限制)的動態庫,它具備部分動態特性,好比:

  • Embedded Framework 能夠在 Extension可執行文件 和 APP可執行文件 之間共享,可是不能像系統的動態庫同樣,在不一樣的 APP(進程) 中共享
  • 系統的 Framework 不須要拷貝到目標程序中,Embedded Framework 最後也仍是要拷貝到 APP 中.

靜態庫 tatic Framework

Static Framework,靜態庫,用戶能夠製做,能夠粗略的理解爲,它等價於 頭文件 + 資源文件 + 二進制代碼,它具備靜態庫的屬性。

靜態庫就是咱們組件化中常見的工具庫

ios中的動態庫,靜態庫 ios製做靜態庫

相關文章
相關標籤/搜索