@(〓〓 iOS-實用技術)[靜態庫/動態庫封裝]
- 作者: Liwx
- 郵箱: 1032282633@qq.com
目錄
- 06.iOS 靜態庫的封裝和使用
- 1.iOS 庫的基本概念
- 靜態庫和動態庫
- 2.靜態庫的封裝
- .a靜態庫的封裝
- 編譯Debug/Release 模擬器/真機版本的靜態庫
- 合并靜態庫
- .framework靜態庫的封裝
- .framework靜態庫的使用
- .a靜態庫的封裝
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