ios中靜態庫和動態庫的使用

一、庫的簡介
庫:是程序代碼的集合,是共享程序代碼的一種方式
根據源代碼的公開情況,庫可以分爲2種:
1、開源庫:公開源代碼,可以看到具體的實現.SDWebImage、AFNetWorking
2、閉源庫:不公開源代碼,是經過編譯後的二進制文件,看不到具體的實現.它主要分爲:靜態庫、動態庫

 
2.1、靜態庫的存在形式是:
.a或者.framework;
靜態庫在鏈接的時候會被完整的複製到可執行文件中,被多次使用就有多份冗餘拷貝(即不同app之間都需要獨立導入,在ios系統中會有多份),實際開發中都是靜態庫,如百度地圖等
靜態庫應用場景:
場景一:百度地圖核心代碼 --> 編譯成靜態庫 --> 對外暴露統一接口 --> 開發者集成靜態庫,調用
場景二:公司內部核心成員編寫一份核心代碼 --> 編譯成靜態庫 --> 給其它成員使用 --> 避免核心代碼泄漏

保護公司的核心代碼

在MRC項目中打包成靜態庫,可以在ARC下直接使用不需要轉換 


2.2、動態庫的存在形式是:

dylib或者.framework:

如系統的框架都是動態庫

動態庫鏈接的時候不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存。項目中如果使用了自制的動態庫,不能被上傳到AppStroe上,因此動態庫是不會被使用的。

ios8.0中開放了動態加載的dylib的接口,動態庫的掛載。


二、靜態庫的使用

主要包括:.a和.h文件

1、創建.a的靜態庫

1.1、創建工程時選擇工程類型


1.2、創建普通的類,來封裝方法

@interface Tool : NSObject

+ (void)testRun;


@end

@implementation Tool

+ (void)testRun{
    NSLog(@"測試靜態庫的接口方法");
}

@end

1.3、編譯工程即可生成靜態庫文件,注:在iphone 6模擬器下進行編譯


1.4、暴露靜態庫的.h文件,讓外部通過接口訪問




1.5、創建新工程,導入“.a和.h”文件使用靜態庫

commend + shift + n:創建一個新工程





2、靜態庫的架構

設備的CPU架構:不同的設備使用的CPU是不同的,CPU不同造成使用的CPU架構(指令集)不同
    每個靜態庫有其支持的CPU架構,如果靜態庫在不支持的CPU架構上運行就會報錯。模擬器和CPU的架構是不同的。
    
模擬器使用的CPU架構;
iPhone4s-iPhone5 : i386
iPhone5s-iPhone7plus 、iPhone SE: x86_64


真機使用的CPU架構:
iPhone3gs-iPhone4s : armv7
iPhone5-iPhone5c : armv7s
iPhone5s-iPhone6plus : arm64


唯一特殊:只要支持armv7的靜態庫可以在armv7s上正常運行

在創建靜態庫時,一般通過多Targets方式邊開發邊調試靜態庫


2.1、查看靜態庫文件支持的CPU架構


lipo -info 靜態庫名字



2.2、合成靜態庫文件的架構


2.2.1、合成模擬器所需要的全部架構

分別編譯x86_64、i386靜態庫架構



把編譯好的文件移到同一個文件夾下,然後再合併





注:如果把debug設置爲NO,則編譯出來的靜態庫文件直接支持所有的模擬器架構或者真機的所有架構



2.2.2、合成支持所有真機架構的靜態庫文件



2.2.3、類似第三方SDK一樣生成支持所有真機和模擬器架構的靜態庫文件




合成arvm7s架構,它在2014年10月份的xcode更新中,已經不支持輸出了,如果需要合成,則需要進行如下配置

 



注:合成靜態庫的問題:如果靜態庫的包比較大,則不合成支持架構的通用靜態庫文件,開發時可以採用先合併,發佈時使用真機架構的靜態庫。如果文件體積小,則可以合成通用架構的架構靜態庫文件。

打包靜態庫文件是,一些資源文件(圖片、等其它)不會合併到.a靜態庫中,需要自己拿出來,然後放到創建的.bundle文件裏面,並把該.bundle文件和.a靜態庫文件一起導入使用的工程中。

在Xcode 7.0以後會默認包含bitcode,如果導入一些第三方庫報錯bitcode,則需要把bitcode設置爲NO




3、製作.framework靜態庫

在製作framwork庫時,默認是動態庫,需要進行如下修改


3.1、創建靜態庫的核心文件,並設置它編譯爲.framwork的靜態庫



.framework靜態庫文件,也是分架構輸出的,方式和上面.a靜態庫一致。

在使用.framework靜態庫時,導入時用"<>"


三、動態庫的使用

使用自己製作的動態庫文件時,需要進行如下配置


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