概述:
-
1.靜態庫和動態庫的存在形式
- 靜態庫:
.a
和.framework
- 動態庫:
.dylib
和.framework
- 靜態庫:
-
2.靜態庫和動態庫在使用上的區別
- 靜態庫:鏈接時,靜態庫會被完整地復制到可執行文件中,被多次使用就有多份
冗余拷貝
(左圖所示) - 動態庫:鏈接時不復制,程序
運行時
由系統動態加載到內存,供程序調用,系統只加載一次
,多個程序共用,節省內存
(右圖所示)
靜態庫與動態庫 -
注意
:項目中如果使用了自制的動態庫,不能被上傳到AppStore
- 靜態庫:鏈接時,靜態庫會被完整地復制到可執行文件中,被多次使用就有多份
-
3.靜態庫的使用場合
- 不公開源代碼,不想讓他人看到具體實現.
靜態庫的創建方法
- 新建一個項目(和我們平時的做法一樣)
-
2.點擊
項目
,添加一個TARGET
,選擇靜態庫
(如下圖)
添加項目
添加靜態庫
設置靜態庫的名稱
此時我們看到項目中多出了幾個文件
系統生成了幾個文件
- 2.創建要生成靜態庫的文件(要在特定的文件夾中哦)
在MyLib文件
下自動生成的MyLib.h
和MyLib.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.靜態庫的引入和使用
-
如果沒有引入靜態庫,就會出錯(如下)
沒有引入靜態庫直接使用-->報錯 -
引入靜態庫
引入靜態庫
-