封裝.a檔案以及應用.a檔案

來源:互聯網
上載者:User

封裝.a檔案以及應用.a檔案
簡介什麼是庫?

庫是程式碼的集合,是共用程式碼的一種方式

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

開源庫

公開原始碼,能看到具體實現

比如SDWebImage、AFNetworking

閉源庫

不公開原始碼,是經過編譯後的二進位檔案,看不到具體實現

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

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

靜態庫:.a和.framework

動態庫:.dylib和.framework

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

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

動態庫:連結時不複製,程式運行時由系統動態載入到記憶體,供程式調用,系統只載入一次,多個程式共用,節省記憶體(右圖所示)

需要注意的是:

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

製作.a

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

添加庫需要包含的原始碼

將李明傑老師的重新整理架構MJRefresh拖入工程

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

選擇真機裝置,然後Command+B編譯,libFYSView.a檔案從紅色變為黑色

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

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

 

Debug-iphoneos檔案夾裡面的東西是用在真機上的

Debug-iphonesimulator檔案夾裡面的東西是用在模擬器上的

如果Scheme是Release模式,產生的檔案夾就以Release開頭

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

在終端輸入指令

找到對應的檔案,先cd這個檔案夾,然後執行如下操作:

lipo-createDebug-iphoneos/libMJRefresh.aDebug-iphonesimulator/libMJRefresh.a-outputlibMJRefresh.a  

.a檔案的體積(一般情況下)

  • 真機用的.a >模擬器用的.a

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

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

    使用.a

    如何使用.a

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

     

    • 我把FYS_Header和FYSView合并在SDK的.h檔案,方便調用。因為FYS_Header需要在多個地方應用,之前封裝的.a檔案不能正常訪問所以就這樣做了。
      在使用自製的靜態庫時,如果遇到error:unrecognized selector sent to class這樣的錯誤,查看Other Linker Flags,有沒有設定Other Linker Flags設定的三個值:-all_load就是會載入靜態庫檔案中的所有成員,-ObjC就是會載入靜態庫檔案中實現一個類或者分類的所有成員,-force_load(包的路徑)就是會載入指定路徑的靜態庫檔案中的所有成員。所以對於使用runtime時候的反射調用的方法應該使用這三個中的一個進行link,以保證所有的類都可以載入到記憶體中供程式動態調用
      出錯原因:應為.a檔案中有category檔案,所以Xcode編譯就把category中的方法錯誤認為是系統的內部方法,但系統中沒有這個方法,所以調試的時候,就找不到該方法的實現,報出錯誤資訊:'unrecognized selector sent to class *******'

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.