1嗅义、什么是庫
庫是共享程序代碼的方式钳宪,一般分為靜態(tài)庫和動態(tài)庫揭北。
2、靜態(tài)庫與動態(tài)庫的區(qū)別
靜態(tài)庫:鏈接時完整地拷貝至可執(zhí)行文件中吏颖,被多次使用就有多份冗余拷貝搔体。
動態(tài)庫:鏈接時不復制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存半醉,供程序調(diào)用疚俱,系統(tǒng)只加載一次,多個程序共用缩多,節(jié)省內(nèi)存呆奕。
3养晋、iOS里靜態(tài)庫的形式
.a
和 .framework
4、iOS里動態(tài)庫的形式
.dylib
和 .framework
5梁钾、.framework為什么既是靜態(tài)庫又是動態(tài)庫绳泉?
系統(tǒng)的.framework
是動態(tài)庫,我們自己建立的.framework
是靜態(tài)庫姆泻。
6零酪、.a與.framework有什么區(qū)別?
.a
是一個純二進制文件拇勃,.framework
中除了有二進制文件之外還有資源文件四苇。.a
文件不能直接使用,至少要有.h
文件配合潜秋,.framework
文件可以直接使用蛔琅。.a
+.h
+sourceFile
=.framework
建議用
.framework
7、為什么要使用靜態(tài)庫峻呛?
方便共享代碼罗售,便于合理使用。
實現(xiàn)iOS程序的模塊化钩述,可以把固定的業(yè)務模塊化成靜態(tài)庫寨躁。
和別人分享你的代碼庫,但不想讓別人看到你代碼的實現(xiàn)牙勘。
開發(fā)第三方sdk的需要
8职恳、制作靜態(tài)庫時的幾點注意:
注意理解:無論是
.a
靜態(tài)庫還是.framework
靜態(tài)庫,我們需要的都是二進制文件+.h
+其它資源文件的形式方面,不同的是放钦,.a
本身就是二進制文件,需要我們自己配上.h
和其它文件才能使用恭金,而.framework
本身已經(jīng)包含了.h
和其它文件操禀,可以直接使用。圖片資源的處理:兩種靜態(tài)庫横腿,一般都是把圖片文件單獨的放在一個
.bundle
文件中颓屑,一般.bundle
的名字和.a
或.framework
的名字相同。.bundle
文件很好弄耿焊,新建一個文件夾揪惦,把它改名為.bundle
就可以了,右鍵罗侯,顯示包內(nèi)容可以向其中添加圖片資源器腋。category
的處理:category
是我們實際開發(fā)項目中經(jīng)常用到的,把category
打成靜態(tài)庫是沒有問題的,但是在用這個靜態(tài)庫的工程中蒂培,調(diào)用category
中的方法時會有找不到該方法的運行時錯誤selector not recognized
再愈,解決辦法是:在使用靜態(tài)庫的工程中配置other linker flags
的值為-ObjC
。復雜的靜態(tài)庫:如果一個靜態(tài)庫很復雜护戳,需要暴露的
.h
比較多的話,就可以在靜態(tài)庫的內(nèi)部創(chuàng)建一個.h
文件(一般這個.h
文件的名字和靜態(tài)庫的名字相同)垂睬,然后把所有需要暴露出來的.h
文件都集中放在這個.h
文件中媳荒,而那些原本需要暴露的.h
都不需要再暴露了,只需要把.h
暴露出來就可以了驹饺。