靜態庫和動態庫

什么是庫

  • 庫是程序代碼的集合,是共享程序代碼的一種方式
  • 根據源代碼的公開情況,庫可以分為2種類型
    • 開源庫
      • 公開源代碼,能看到具體實現
    • 閉源庫
      • 不公開源代碼,是經過編譯后的二進制文件,看不到具體實現
      • 主要分為:靜態庫動態庫

靜態庫和動態庫的存在形式

靜態庫:.a和 .framework
動態庫:.dylib和 .framework

  • 靜態庫和動態庫在使用上的區別
    靜態庫:鏈接時,靜態庫會被完整地復制到可執行文件中,被多次使用就有多份冗余拷貝
    動態庫:鏈接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存
    注意
    項目中如果使用了自制的動態庫,不能被上傳到AppStore

為什么要做靜態庫

  1. 國內的企業,掌握有核心技術,同時是又希望更多的程序員來使用其技術,因此采用"閉源"的方式開發使用
    例如:百度地圖,友盟,JPush等

  2. 在企業開發中,一些核心技術或者常用框架,出于安全性和穩定性的考慮,也會提供靜態庫給程序員使用

靜態庫制作

  • .靜態庫的創建
    • 下面封裝SDWebImage
  1. 創建項目
    Snip20160605_14.png
Snip20160605_15.png
Snip20160605_17.png

接下來很重要

  • 添加需要暴露的頭文件
Snip20160605_18.png
Snip20160605_19.png

接下來需要將一些理論

  • 靜態庫是分真機模擬器,通常真機的靜態庫文件要大一些
  • cpu架構
    • 模擬器中
      • iphone4s - iphone5 i386架構
      • iphone5s - iphone6plus x86_64架構
        注意:如果是接下來生成靜態庫支通過什么模擬器編譯就會生成支持對應架構的靜態庫
  • 如果想讓生成的模擬器靜態庫支持所有的模擬器需要配置
    build Settings —>build Active Arcitecture Only No
Snip20160605_20.png

真機架構分類
iPhone3gs -> 4s armv7 (只要支持armv7就可以在armv7s行運行)
ipone5 -> 5c armv7s
默認通過真機編譯的靜態庫支持 armv7 arm64

如果想要生成的靜態庫在及支持模擬器也支持真機 就需要通過終端合并
命令: lipo -create 靜態庫1 靜態庫2 -output 新的靜態庫的名字

  • 當我們通過編譯之后


    Snip20160605_23.png
  • 選擇libSDWebImageFramework.a 右鍵show In Finder
Snip20160605_24.png
  • 這樣可以直接就可以將靜態庫拖到項目中使用了 ,下面我們合并一下靜態庫
Snip20160605_26.png
  • 新建一個項目進行測試
Snip20160605_27.png

注意:默認情況下,靜態庫中的分類不會參與編譯 程序會出現找不到方法的錯誤 ,們需要配置

Snip20160605_12.png

好了, .a靜態庫制作完畢

一般開發中給使用的應該是release版本的靜態庫

  • 那么怎么生成的是release版本的靜態庫呢 ,其實很簡單
Snip20160605_28.png
Snip20160605_29.png
Snip20160605_30.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容