@(〓〓 iOS-實用技術(shù))[靜態(tài)庫/動態(tài)庫封裝]
- 作者: Liwx
- 郵箱: 1032282633@qq.com
目錄
- 06.iOS 靜態(tài)庫的封裝和使用
- 1.iOS 庫的基本概念
- 靜態(tài)庫和動態(tài)庫
- 2.靜態(tài)庫的封裝
- .a靜態(tài)庫的封裝
- 編譯Debug/Release 模擬器/真機(jī)版本的靜態(tài)庫
- 合并靜態(tài)庫
- .framework靜態(tài)庫的封裝
- .framework靜態(tài)庫的使用
- .a靜態(tài)庫的封裝
1.iOS 庫的基本概念
庫就是程序代碼的集合,是共享程序代碼的一種方式.
靜態(tài)庫和動態(tài)庫
-
1.iOS中靜態(tài)庫和動態(tài)庫文件的后綴名
- 靜態(tài)庫文件后綴名:
.a
和.framework
- 動態(tài)庫文件后綴名:
.dylib
和.framework
- 靜態(tài)庫文件后綴名:
-
2.靜態(tài)庫和動態(tài)庫的區(qū)別
-
動態(tài)庫則不會復(fù)制, 只有一份
. 程序運行時動態(tài)加載到內(nèi)存;系統(tǒng)只加載一次
, 多個程序共用, 節(jié)省內(nèi)存; - 但是項目中如果
使用到自己的動態(tài)庫
,不允許上架
!
但是WWDC2014上公布的蘋果對ios8開放動態(tài)加載dylib的接口
,也就是說 開放了動態(tài)庫掛載
. -
靜態(tài)庫在鏈接時
, 會被完整的復(fù)制到可執(zhí)行文件中
; 被多次使用, 就有多份拷貝
;
-
2.靜態(tài)庫的封裝
.a靜態(tài)庫的封裝
- 1.創(chuàng)建工程選擇
iOS/Framework & Library
,選擇Coaoa Touch Static Library
- 2.設(shè)置對外公開的頭文件
- 3.設(shè)置讓所有架構(gòu)都能正常編譯和使用
- 5.創(chuàng)建一個Log類,實現(xiàn)接口方法,并在.h文件中對外提供接口方法
// Log.h文件中提供接口
+ (void)wxLog;
// Log.m文件中實現(xiàn)方法
+ (void)wxLog
{
NSLog(@"Test Lib");
}
- 6.使用快捷鍵
command + b
編譯靜態(tài)庫(當(dāng)前運行選擇為模擬器),編譯成功后找到庫存儲路徑.
進(jìn)入靜態(tài)庫生成的路徑中
以上操作彈出窗口后進(jìn)入
Build/Products/Debug-iphonesimulator
文件夾中,.a的庫文件
和對外公開的頭文件
就存放在該目錄下.因為剛才是處于Debug模式下選擇模擬器運行環(huán)境,所以生成的Debug-iphonesimulator文件夾
- 7.確保生成的靜態(tài)庫能在你所有模擬器上運行,先查看靜態(tài)庫支持的平臺.
- 使用
lipo -info
查看庫所支持的架構(gòu).i386 x86_64
: 表示能在所有模擬器上運行. - 模擬器架構(gòu):
iPhone 4s - iPhone 5是i386架構(gòu)
,iPhone 5s - iPhone 6s Plus是x86_64架構(gòu)
.
- 使用
- 8.靜態(tài)庫的使用.只需將生成的.a文件和.h文件拖入到測試靜態(tài)庫的工程即可使用靜態(tài)庫.
編譯Debug/Release 模擬器/真機(jī)版本的靜態(tài)庫
- 1.設(shè)置要編譯成Debug還是Release版本的靜態(tài)庫.如果是要生成Release就選擇Release
- 2.設(shè)置要編譯成真機(jī)還是模擬器版的靜態(tài)庫
- 3.如果四種情況的靜態(tài)庫都進(jìn)行編譯,則會生成以下四個文件夾
合并靜態(tài)庫
- 1.使用lipo -create ... -output ... 合并靜態(tài)庫.最終合并的靜態(tài)庫的大小相當(dāng)于Debug Device.a和Debug Simulator.a的總和.
.framework靜態(tài)庫的封裝
- 1.創(chuàng)建工程選擇
iOS/Framework & Library
,選擇Coaoa Touch Framework
- 2.刪除自動生成的頭文件.
注意
: Info.plist不能刪除
- 3.創(chuàng)建Tool類,并對應(yīng)提供log類方法,實現(xiàn)log類方法
// Tool.h文件中提供接口
+ (void)log;
// Tool.m文件中實現(xiàn)方法
+ (void)log
{
NSLog(@"framework Test");
}
- 4.設(shè)置要生成的.framework文件為靜態(tài)庫
- 5.設(shè)置支持所有架構(gòu)
- 6.設(shè)置要公開的所有頭文件
.framework靜態(tài)庫的使用
- 1.創(chuàng)建一個測試靜態(tài)庫的工程,生成的.framework的靜態(tài)庫拖入到工程
- 2.使用
尖括號<>
導(dǎo)入頭文件之后就能正常使用.framework的靜態(tài)庫-
注意
: 導(dǎo)入頭文件為#import <Framework/Tool.h>
-