- 庫:程序代碼的集合,共享程序代碼的一種方式
- 根據(jù)源代碼的公開情況,庫可以分為2種情況
開源庫:公開源代碼,能看到具體實(shí)現(xiàn)
閉源庫:不公開源代碼,經(jīng)過編譯后的二進(jìn)制文件,看不到具體實(shí)現(xiàn)(靜態(tài)庫 動(dòng)態(tài)庫) - 靜態(tài)庫和動(dòng)態(tài)庫
靜態(tài)庫: .a和 .framework
動(dòng)態(tài)庫: dylib和 .framework(iOS9取消了.dylib,使用tbd替代) - 靜態(tài)庫和動(dòng)態(tài)庫在使用上的區(qū)別
靜態(tài)庫:連接時(shí),靜態(tài)庫會(huì)被完成地復(fù)制到可執(zhí)行文件中,被多次使用就有多分冗余拷貝
動(dòng)態(tài)庫:鏈接時(shí),連接不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個(gè)程序共用,節(jié)省內(nèi)存(項(xiàng)目中,如果使用了動(dòng)態(tài)庫,不能被上傳到AppStore)
靜態(tài)庫簡(jiǎn)單使用(.a)
-
新建靜態(tài)庫項(xiàng)目
新建靜態(tài)庫.png -
編寫靜態(tài)庫文件
編寫靜態(tài)庫文件.png - 將編寫的靜態(tài)庫文件的.h添加到項(xiàng)目
靜態(tài)庫.png
- 編譯 command+b
-
Show in Finder 查看靜態(tài)庫文件
查看靜態(tài)庫文件.png - Undefinde symbols for architecture x86_64:不能運(yùn)行在x86_64架構(gòu)上
靜態(tài)文件編譯和運(yùn)行的架構(gòu)不一樣
模擬器:
iPhone4 4s 5 32位架構(gòu) i368
iphone 5s 6 6p 7 7p 64位架構(gòu) x86_64
真機(jī)
iphone4 32位架構(gòu) armV7
iphone 5 32位架構(gòu) armv7s
iphone5s ... 64位架構(gòu) arm64
查看靜態(tài)庫架構(gòu)
- 控制臺(tái)進(jìn)入到架構(gòu)所在目錄
- lipo -info xxxxxx.a
合并架構(gòu)
- 方式1:命令行
lipo -create xxxx.a xxxx.a -output xxxx.a
-
方式2:修改debug下編譯模式為NO(不能合并模擬器和真機(jī))
合并架構(gòu).png - 有點(diǎn):程序員不需要切換模擬器和真機(jī)
- 缺點(diǎn):占用空間大
- 如果靜態(tài)庫體積小,建議合并,如果靜態(tài)庫體積太大,不建議合并
資源包
- 資源包的創(chuàng)建:將文件夾名稱改為 .bundle結(jié)尾即可
- 導(dǎo)圖圖片的時(shí)候要寫全路徑
資源包路徑要寫全路徑.png
- 資源包要手動(dòng)導(dǎo)入
資源包路徑要手動(dòng)導(dǎo)入.png
靜態(tài)庫(.framework)
-
創(chuàng)建
framework靜態(tài)庫的創(chuàng)建.png -
刪除所有內(nèi)容,直接導(dǎo)入要導(dǎo)入文件的頭文件即可
修改framework的文件.png
修改后的文件.png -
將頭文件拖拽到public中
添加頭文件.png -
添加架構(gòu)
添加架構(gòu).png
add.png -
將動(dòng)態(tài)庫修改為靜態(tài)庫(framework默認(rèn)創(chuàng)建的是動(dòng)態(tài)庫)
將動(dòng)態(tài)庫修改為靜態(tài)庫.png - 編譯 Command + b