iOS--靜態庫開發

概述:
  • 1.靜態庫和動態庫的存在形式

    • 靜態庫:.a.framework
    • 動態庫:.dylib.framework
  • 2.靜態庫和動態庫在使用上的區別

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

    • 不公開源代碼,不想讓他人看到具體實現.

靜態庫的創建方法

    1. 新建一個項目(和我們平時的做法一樣)
  • 2.點擊項目,添加一個TARGET,選擇靜態庫(如下圖)

    添加項目

添加靜態庫
設置靜態庫的名稱

此時我們看到項目中多出了幾個文件

系統生成了幾個文件
  • 2.創建要生成靜態庫的文件(要在特定的文件夾中哦)
    MyLib文件下自動生成的 MyLib.hMyLib.m 文件,我們一般不直接使用,此時我們刪除即可,這是我們就要在 MyLib文件中添加我們要生成靜態庫的文件
新建要生成靜態庫的文件
  • 3.暴漏靜態庫的頭文件,便于外界使用


    暴漏靜態庫頭文件
  • 4.編譯靜態庫(默認生成的是Debug下的靜態庫)


    編譯靜態庫--真機
編譯靜態庫--模擬器

此時我們可以在Finder中查看生成的靜態庫文件

靜態庫文件

注意:編譯默認生成的是Debug環境下的靜態庫文件,且CPU架構僅僅是選中的模擬器(如此是的iPhone6)的CPU架構,(如何查看靜態庫文件支持的CPU架構,見下文)

修改為NO即可支持所有型號的模擬器的CPU架構

修改后再次重復編譯即可

  • 5.編譯靜態庫(生成的是Release下的靜態庫)
修改編譯配置為Release

再次編譯即可生成Release環境下的靜態庫

此時我們一共生成了4種類型的靜態庫文件

4種類型的靜態庫文件
  • 6.為開發方便我們有可能還要將模擬和真機的靜態庫合并
    • 首先利用終端進入靜態庫所在的文件目錄

    • lipo -create Release-iphoneos/靜態庫.a Release-iphonesimulator/靜態庫.a -output 靜態庫.a

    • 此時生成的就是就是合并后的靜態庫文件(即可用在真機又可用在模擬器上)

  • 7.查看靜態庫支持的CPU架構

    • 首先利用終端進入靜態庫所在的文件目錄
    • lipo -info 靜態庫.a
  • 8.靜態庫的引入和使用

    • 如果沒有引入靜態庫,就會出錯(如下)


      沒有引入靜態庫直接使用-->報錯
    • 引入靜態庫


      引入靜態庫
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 簡介 在企業開發中,一些核心技術或者常用框架,出于安全性和穩定性的考慮,不想被外界知道,所以會把核心代碼打包成靜態...
    漢斯哈哈哈閱讀 21,996評論 73 253
  • 這是一篇好文章,原帖地址 簡介 在企業開發中,一些核心技術或者常用框架,出于安全性和穩定性的考慮,不想被外界知道,...
    小弟正在學習閱讀 333評論 0 1
  • 靜態庫與動態庫的區別 首先來看什么是庫,庫(Library)說白了就是一段編譯好的二進制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 12,063評論 3 42
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,268評論 25 708
  • 每每在河邊跑步,都會看到這些靜靜的垂釣者。無論是風吹雨打,還是天寒地凍,這些垂釣者都是河邊永遠的風景。 垂釣者基本...
    老散流年閱讀 300評論 0 0