06.iOS 靜態庫的封裝和使用

@(〓〓 iOS-實用技術)[靜態庫/動態庫封裝]


目錄

  • 06.iOS 靜態庫的封裝和使用
  • 1.iOS 庫的基本概念
    • 靜態庫和動態庫
  • 2.靜態庫的封裝
    • .a靜態庫的封裝
      • 編譯Debug/Release 模擬器/真機版本的靜態庫
      • 合并靜態庫
    • .framework靜態庫的封裝
      • .framework靜態庫的使用

1.iOS 庫的基本概念

庫就是程序代碼的集合,是共享程序代碼的一種方式.


靜態庫和動態庫

  • 1.iOS中靜態庫和動態庫文件的后綴名

    • 靜態庫文件后綴名: .a.framework
    • 動態庫文件后綴名: .dylib.framework
  • 2.靜態庫和動態庫的區別

    • 動態庫則不會復制, 只有一份. 程序運行時動態加載到內存; 系統只加載一次, 多個程序共用, 節省內存;
    • 但是項目中如果使用到自己的動態庫, 不允許上架!
      但是WWDC2014上公布的蘋果對ios8開放動態加載dylib的接口,也就是說 開放了動態庫掛載.
    • 靜態庫在鏈接時, 會被完整的復制到可執行文件中; 被多次使用, 就有多份拷貝;

2.靜態庫的封裝

.a靜態庫的封裝

  • 1.創建工程選擇iOS/Framework & Library,選擇Coaoa Touch Static Library
01.創建工程.png

  • 2.設置對外公開的頭文件
02.設置對外公開的頭文件.png

  • 3.設置讓所有架構都能正常編譯和使用
03.設置讓所有架構都能正常編譯和使用.png

  • 5.創建一個Log類,實現接口方法,并在.h文件中對外提供接口方法
// Log.h文件中提供接口
+ (void)wxLog;

// Log.m文件中實現方法
+ (void)wxLog
{
    NSLog(@"Test Lib");
}
04.創建一個Log類.png

  • 6.使用快捷鍵command + b編譯靜態庫(當前運行選擇為模擬器),編譯成功后找到庫存儲路徑.

進入靜態庫生成的路徑中

05.靜態庫生成的路徑.png

以上操作彈出窗口后進入Build/Products/Debug-iphonesimulator文件夾中,.a的庫文件對外公開的頭文件就存放在該目錄下.因為剛才是處于Debug模式下選擇模擬器運行環境,所以生成的Debug-iphonesimulator文件夾

06.Build:Products:Debug-iphonesimulator文件夾.png

  • 7.確保生成的靜態庫能在你所有模擬器上運行,先查看靜態庫支持的平臺.
    • 使用lipo -info查看庫所支持的架構. i386 x86_64: 表示能在所有模擬器上運行.
    • 模擬器架構: iPhone 4s - iPhone 5是i386架構,iPhone 5s - iPhone 6s Plus是x86_64架構.
07.查看庫所支持的架構.png

  • 8.靜態庫的使用.只需將生成的.a文件和.h文件拖入到測試靜態庫的工程即可使用靜態庫.
08.靜態庫的使用.png
09.靜態庫的使用.png

編譯Debug/Release 模擬器/真機版本的靜態庫

  • 1.設置要編譯成Debug還是Release版本的靜態庫.如果是要生成Release就選擇Release
10.設置要編譯成Debug還是Release版本的靜態庫.png
11.選擇對應的版本.png

  • 2.設置要編譯成真機還是模擬器版的靜態庫
12.設置要編譯成真機.png
  • 3.如果四種情況的靜態庫都進行編譯,則會生成以下四個文件夾
13.四種情況的靜態庫都進行編譯.png

合并靜態庫

  • 1.使用lipo -create ... -output ... 合并靜態庫.最終合并的靜態庫的大小相當于Debug Device.a和Debug Simulator.a的總和.
14.合并靜態庫.png

.framework靜態庫的封裝

  • 1.創建工程選擇iOS/Framework & Library,選擇Coaoa Touch Framework
15.創建工程.png
  • 2.刪除自動生成的頭文件.注意: Info.plist不能刪除

16.刪除自動生成的頭文件.png

  • 3.創建Tool類,并對應提供log類方法,實現log類方法
// Tool.h文件中提供接口
+ (void)log;

// Tool.m文件中實現方法
+ (void)log
{
    NSLog(@"framework Test");
}

  • 4.設置要生成的.framework文件為靜態庫
17.設置要生成的.framework文件為靜態庫.png

  • 5.設置支持所有架構
18.設置支持所有架構.png

  • 6.設置要公開的所有頭文件
19.設置要公開的所有頭文件.png

.framework靜態庫的使用

  • 1.創建一個測試靜態庫的工程,生成的.framework的靜態庫拖入到工程
20.靜態庫拖入到工程.png
  • 2.使用尖括號<>導入頭文件之后就能正常使用.framework的靜態庫
    • 注意: 導入頭文件為 #import <Framework/Tool.h>
21.使用.framework的靜態庫.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 靜態庫與動態庫的區別 首先來看什么是庫,庫(Library)說白了就是一段編譯好的二進制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 12,063評論 3 42
  • 僅以方便自己查閱記錄前言1.靜態庫和動態庫有什么異同?靜態庫:鏈接時完整地拷貝至可執行文件中,被多次使用就有多份冗...
    190CM閱讀 4,276評論 0 4
  • 介紹 動態庫形式:.dylib和.framework 靜態庫形式:.a和.framework 動態庫和靜態庫的區別...
    齊滇大圣閱讀 46,327評論 18 251
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,270評論 25 708
  • 已完成 【午間話題】熊二 打卡期間有什么值得回憶的事情? 1、一次較時間晚打卡,因為哄孩子睡覺結果把自己也哄睡著了...
    撿到蜜罐的熊閱讀 173評論 0 0