iOS開發之靜態庫.a的制作


簡介

什么是庫?

庫是程序代碼的集合,是共享程序代碼的一種方式

 

根據源代碼的公開情況,庫可以分為2種類型

開源庫

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

比如SDWebImageAFNetworking

 

閉源庫

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

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

靜態庫和動態庫

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

靜態庫:.a.framework

動態庫:.dylib.framework

 

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

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

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

            

需要注意的是:

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

制作.a

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

 

添加庫需要包含的源代碼

 

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

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

 

 

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

 

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

 

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

 

  • Debug-iphoneos文件夾里面的東西是用在真機上的
  • Debug-iphonesimulator文件夾里面的東西是用在模擬器上的
  • 如果SchemeRelease模式,生成的文件夾就以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、資源文件拖拽到其他項目中即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM