靜態(tài)庫Static

  • 庫:程序代碼的集合,共享程序代碼的一種方式
  • 根據(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容