每篇文章都會有自己的存在價值,本篇也自然不例外。雖然站內有壹篇類似的文章,不過講述內容還是有可學習的地方。比如:iOS打包上傳是不允許自制的動態庫的。 
簡介
 什麽是庫?
 庫是程序代碼的集合,是共享程序代碼的壹種方式
根據源代碼的公開情況,庫可以分爲 2 種類型 
開源庫
 公開源代碼,能看到具體實現
比如 SDWebImage 、 AFNetworking 
閉源庫
 不公開源代碼,是經過編譯後的二進制文件,看不到具體實現
主要分爲:靜態庫、動態庫 
靜態庫和動態庫
 靜態庫和動態庫的存在形式
 靜態庫: .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 文件夾裏面的東西是用在模擬器上的
 - 如果 Scheme 是 Release 模式,生成的文件夾就以 Release 開頭
  
 如果想讓壹個 .a 文件能同時用在真機和模擬器上,需要進行合並
 在終端輸入指令 [/cpp]lipo -create Debug-iphoneos/libMJRefresh.a Debug-iphonesimulator/libMJRefresh.a -output libMJRefresh.a[/cpp] .a 文件的體積(壹般情況下) 
- 真機用的 .a > 模擬器用的 .a
 - 所合成 .a == 真機用的 .a + 模擬器用的 .a
  
 通過 lipo –info libMJRefresh.a 可以查看 .a 的類型(模擬器還是真機) 
使用 .a
 如何使用 .a
直接將 .a 、 .h 、資源文件拖拽到其他項目中即可

本文链接:http://it72.com/9384.htm