概述:
-
1.靜態(tài)庫和動態(tài)庫的存在形式
- 靜態(tài)庫:
.a
和.framework
- 動態(tài)庫:
.dylib
和.framework
- 靜態(tài)庫:
-
2.靜態(tài)庫和動態(tài)庫在使用上的區(qū)別
- 靜態(tài)庫:鏈接時,靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中捶索,被多次使用就有多份
冗余拷貝
(左圖所示) - 動態(tài)庫:鏈接時不復(fù)制,程序
運(yùn)行時
由系統(tǒng)動態(tài)加載到內(nèi)存耀鸦,供程序調(diào)用动看,系統(tǒng)只加載一次
,多個程序共用十减,節(jié)省內(nèi)存
(右圖所示)
-
注意
:項(xiàng)目中如果使用了自制的動態(tài)庫告抄,不能被上傳到AppStore
- 靜態(tài)庫:鏈接時,靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中捶索,被多次使用就有多份
-
3.靜態(tài)庫的使用場合
- 不公開源代碼撰茎,不想讓他人看到具體實(shí)現(xiàn).
靜態(tài)庫的創(chuàng)建方法
- 新建一個項(xiàng)目(和我們平時的做法一樣)
-
2.點(diǎn)擊
項(xiàng)目
,添加一個TARGET
,選擇靜態(tài)庫
(如下圖)
此時我們看到項(xiàng)目中多出了幾個文件
- 2.創(chuàng)建要生成靜態(tài)庫的文件(要在特定的文件夾中哦)
在MyLib文件
下自動生成的MyLib.h
和MyLib.m
文件,我們一般不直接使用,此時我們刪除即可,這是我們就要在MyLib文件
中添加我們要生成靜態(tài)庫的文件
-
3.暴漏靜態(tài)庫的頭文件,便于外界使用
-
4.編譯靜態(tài)庫(默認(rèn)生成的是Debug下的靜態(tài)庫)
此時我們可以在Finder中查看生成的靜態(tài)庫文件
注意:編譯默認(rèn)生成的是Debug環(huán)境下的靜態(tài)庫文件,且CPU架構(gòu)僅僅是選中的模擬器(如此是的iPhone6)的CPU架構(gòu),(如何查看靜態(tài)庫文件支持的CPU架構(gòu),見下文)
修改后再次重復(fù)編譯即可
- 5.編譯靜態(tài)庫(生成的是Release下的靜態(tài)庫)
再次編譯即可生成Release環(huán)境下的靜態(tài)庫
此時我們一共生成了4種類型的靜態(tài)庫文件
- 6.為開發(fā)方便我們有可能還要將模擬和真機(jī)的靜態(tài)庫合并
首先利用終端進(jìn)入靜態(tài)庫所在的文件目錄
lipo
-create
Release-iphoneos/靜態(tài)庫.a Release-iphonesimulator/靜態(tài)庫.a-output
靜態(tài)庫.a此時生成的就是就是合并后的靜態(tài)庫文件(即可用在
真機(jī)
又可用在模擬器
上)
-
7.查看靜態(tài)庫支持的CPU架構(gòu)
- 首先利用終端進(jìn)入靜態(tài)庫所在的文件目錄
-
lipo
-info
靜態(tài)庫.a
-
8.靜態(tài)庫的引入和使用
-
如果沒有引入靜態(tài)庫,就會出錯(如下)
-
引入靜態(tài)庫
-