- 庫:程序代碼的集合,共享程序代碼的一種方式
- 根據(jù)源代碼的公開情況,庫可以分為2種情況
開源庫:公開源代碼,能看到具體實現(xiàn)
閉源庫:不公開源代碼,經(jīng)過編譯后的二進制文件,看不到具體實現(xiàn)(靜態(tài)庫 動態(tài)庫) - 靜態(tài)庫和動態(tài)庫
靜態(tài)庫: .a和 .framework
動態(tài)庫: dylib和 .framework(iOS9取消了.dylib,使用tbd替代) - 靜態(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)
靜態(tài)庫簡單使用(.a)
-
新建靜態(tài)庫項目
新建靜態(tài)庫.png -
編寫靜態(tài)庫文件
編寫靜態(tài)庫文件.png - 將編寫的靜態(tài)庫文件的.h添加到項目

靜態(tài)庫.png
- 編譯 command+b
-
Show in Finder 查看靜態(tài)庫文件
查看靜態(tài)庫文件.png - Undefinde symbols for architecture x86_64:不能運行在x86_64架構(gòu)上
靜態(tài)文件編譯和運行的架構(gòu)不一樣
模擬器:
iPhone4 4s 5 32位架構(gòu) i368
iphone 5s 6 6p 7 7p 64位架構(gòu) x86_64
真機
iphone4 32位架構(gòu) armV7
iphone 5 32位架構(gòu) armv7s
iphone5s ... 64位架構(gòu) arm64
查看靜態(tài)庫架構(gòu)
- 控制臺進入到架構(gòu)所在目錄
- lipo -info xxxxxx.a
合并架構(gòu)
- 方式1:命令行
lipo -create xxxx.a xxxx.a -output xxxx.a -
方式2:修改debug下編譯模式為NO(不能合并模擬器和真機)
合并架構(gòu).png - 有點:程序員不需要切換模擬器和真機
- 缺點:占用空間大
- 如果靜態(tài)庫體積小,建議合并,如果靜態(tài)庫體積太大,不建議合并
資源包
- 資源包的創(chuàng)建:將文件夾名稱改為 .bundle結(jié)尾即可
- 導(dǎo)圖圖片的時候要寫全路徑

資源包路徑要寫全路徑.png
- 資源包要手動導(dǎo)入

資源包路徑要手動導(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 -
將動態(tài)庫修改為靜態(tài)庫(framework默認(rèn)創(chuàng)建的是動態(tài)庫)
將動態(tài)庫修改為靜態(tài)庫.png - 編譯 Command + b










