iOS開發之靜態庫

最近在與第三方支付平臺對接的時候,接過來的文檔demo裏含有.a靜態庫文件,但是因爲庫包出錯,需要修改,才發現.a靜態庫文件不可修改,所以上網進行了瞭解學習。

現在跟大家分享一下學習的心得。


framework文件和.a文件都是庫文件, 那什麼是庫文件庫是程序代碼的集合,是共享程序代碼的一種方式根據源代碼的公開情況,庫可以分爲 2 種類型.


開源庫公開源代碼,能看到具體實現

比如 SDWebImage  AFNetworking


閉源庫不公開源代碼,是經過編譯後的二進制文件,看不到具體實現

主要分爲:靜態庫、動態庫


靜態庫和動態庫

靜態庫和動態庫的存在形式

靜態庫: .a  .framework

動態庫: .dylib  .framework

靜態庫和動態庫在使用上的區別

靜態庫:鏈接時,靜態庫會被完整地複製到可執行文件中, 被多次使用就有多份冗餘拷貝 (左圖所示)

動態庫:鏈接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存 (右圖所示)

fa2YBfm.png!web.png

uIJrum.png!web.png

需要注意的是:

項目中如果使用了自制的動態庫,不能被上傳到 AppStore

製作 .a

新建項目-> 選擇 “Cocoa Touch Static Library”

2IzEna.png!web.png

添加庫需要包含的源代碼

BNJRny.png!web.png

將李明傑老師的刷新框架MJRefresh拖入工程

6N3EFvI.png!web.png

選擇需要暴露出來的 .h 文件, .m 文件會自動編譯到 .a 文件中

JnE7Zn.png!web.png

M7Vn2m.png!web.png

選擇真機設備,然後 Command+B 編譯, libMJRefresh.a 文件從紅色變爲黑色

jeeAFv.png!web.png

選擇模擬器,依然 Command+B ,模擬器和真機環境下用的 .a 文件是分開的

aeuUJbf.png!web.png

右擊 “Show In Finder” ,查看製作好的 .a 文件

FnQ7Bv.png!web.png

eU77Bz.png!web.png

  • Debug-iphoneos 文件夾裏面的東西是用在真機上的
  • Debug-iphonesimulator 文件夾裏面的東西是用在模擬器上的
  • 如果 Scheme  Release 模式,生成的文件夾就以 Release 開頭

如果想讓一個 .a 文件能同時用在真機和模擬器上,需要進行合併

在終端輸入指令

lipo -create Debug-iphoneos/libMJRefresh.a Debug-iphonesimulator/libMJRefresh.a -output libMJRefresh.a

.a 文件的體積(一般情況下)

  • 真機用的 .a > 模擬器用的 .a
  • 所合成 .a == 真機用的 .a + 模擬器用的 .a

通過 lipo –info libMJRefresh.a 可以查看 .a 的類型(模擬器還是真機)

使用 .a

如何使用 .a

直接將 .a  .h 、資源文件拖拽到其他項目中即可

U36Ffy.png!web.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章