靜態(tài)庫和動態(tài)庫的存在形式
靜態(tài)庫: .a 和 .framework
動態(tài)庫: .dylib 和 .framework
靜態(tài)庫和動態(tài)庫的使用區(qū)別:
靜態(tài)庫:鏈接時,靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中,缺點:【被多次使用,就有多份冗余拷貝】
動態(tài)庫:鏈接時不復(fù)制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存里,供程序調(diào)用,系統(tǒng)只加載一次!多個程序共享資源,節(jié)約內(nèi)存!
注意:項目中如果使用了自制的動態(tài)庫,不能被上傳到AppStore, 除非你越獄了。
.a 靜態(tài)庫 和 .framework的異同:
共同點: 最終都是轉(zhuǎn)化為二進制文件+.h 文件+其它文件,才能使用。
不同點: .a 本身是一個二進制文件,需要配上.h 和其它資源文件才能使用;.framework 本身已經(jīng)包含了 .h 和其它資源文件。它包含了所有東西。
靜態(tài)庫的特點
.a + .h ,.a配合上公共的 .h 文件,我們可以獲取到.a 中暴露的方法或者成員等,你不能控制加載的方式和時機.
在編譯靜態(tài)庫時,需要編譯兩個版本 -> 真機(arm) | 模擬器(i386)
靜態(tài)庫中的資源包的使用
由于Xcode默認(rèn)在編譯時會把所有的素材文件導(dǎo)入到mainBundle中,為了避免與使用靜態(tài)庫的程序沖突。
在靜態(tài)庫中如果要使用圖片素材,會利用bundle的手段
1> 建立bundle,并且向其中添加圖片
2> 創(chuàng)建一個類方法,返回圖片
3> 編譯
4> 調(diào)用方如果需要使用,需要導(dǎo)入 .h + .a + XXX.bundle
制作.a靜態(tài)庫步驟:
1.創(chuàng)建一個靜態(tài)庫工程


2.倒入已經(jīng)創(chuàng)建好的文件
我把自動生成的文件刪除了,因為那個并沒什么卵用

根據(jù)我的步驟添加項目

接下來會多出這樣一個頭文件夾

暴漏.h頭文件

默認(rèn)是加入到了Project文件夾,手動拖到Public里就好了


靜態(tài)庫分真機和 模擬版本的

真機版本analyze一下

Product文件夾下的就由紅色變?yōu)楹谏?證明真機版本已經(jīng)生成成功了



模擬器版本的和真機的步驟一樣,我就不贅述了

合并真機和模擬器版本

使用命令行l(wèi)ipo -create合并

如果你的類里沒有圖片、xib和其他資源那可以到此為止了,如果有,就需要進行下面的操作,生成bundle文件夾
未完待續(xù)......