什么是庫(kù)责循?
庫(kù)是程序代碼的集合糟港,是共享程序代碼的一種方式
根據(jù)源代碼的公開(kāi)情況,庫(kù)可以分為2種類(lèi)型
開(kāi)源庫(kù)
公開(kāi)源代碼院仿,能看到具體實(shí)現(xiàn)
比如SDWebImage秸抚、AFNetworking
閉源庫(kù)
不公開(kāi)源代碼速和,是經(jīng)過(guò)編譯后的二進(jìn)制文件,看不到具體實(shí)現(xiàn)
主要分為:靜態(tài)庫(kù)耸别、動(dòng)態(tài)庫(kù)
靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的存在形式
靜態(tài)庫(kù):.a和.framework
動(dòng)態(tài)庫(kù):.dylib和.framework
需要注意的是:
項(xiàng)目中如果使用了自制的動(dòng)態(tài)庫(kù)健芭,不能被上傳到AppStore
靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)在使用上的區(qū)別
靜態(tài)庫(kù):鏈接時(shí),靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行文件中秀姐,被多次使用就有多份冗余拷貝(左圖所示)
動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制慈迈,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序調(diào)用省有,系統(tǒng)只加載一次痒留,多個(gè)程序共用,節(jié)省內(nèi)存(右圖所示)
靜態(tài)庫(kù)
01. 為什么要做靜態(tài)庫(kù)
1>? 國(guó)內(nèi)的企業(yè)蠢沿,掌握有核心技術(shù)伸头,同時(shí)是又希望更多的程序員來(lái)使用其技術(shù),因此采用"閉源"的方式開(kāi)發(fā)使用
例如:百度地圖舷蟀,友盟恤磷,JPush等
2>? 在企業(yè)開(kāi)發(fā)中,一些核心技術(shù)或者常用框架野宜,出于安全性和穩(wěn)定性的考慮扫步,也會(huì)提供靜態(tài)庫(kù)給程序員使用
02. 靜態(tài)庫(kù)的特點(diǎn)
.a + .h
03. 靜態(tài)庫(kù)簡(jiǎn)單演練
1>? 新建Tools項(xiàng)目
2>? 創(chuàng)建一個(gè)類(lèi)方法,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的加法
3>? 編譯
#? 注意匈子,在編譯靜態(tài)庫(kù)時(shí)河胎,需要編譯兩個(gè)版本 -> 真機(jī)(arm) | 模擬器(i386)
4>? 新建項(xiàng)目將編譯生成的.a + .h拖到項(xiàng)目中使用
04. 靜態(tài)庫(kù)中的資源包的使用
問(wèn)題:有些第三方庫(kù)會(huì)使用到一些圖片素材,例如公司的logo等虎敦。
但是由于Xcode默認(rèn)在編譯時(shí)會(huì)把所有的素材文件導(dǎo)入到mainBundle中游岳,為了避免與使用靜態(tài)庫(kù)的程序沖突。
在靜態(tài)庫(kù)中如果要使用圖片素材其徙,會(huì)利用bundle的手段
1>? 建立bundle胚迫,并且向其中添加圖片
2>? 創(chuàng)建一個(gè)類(lèi)方法,返回圖片
3>? 編譯
4>? 調(diào)用方如果需要使用唾那,需要導(dǎo)入 .h + .a + XXX.bundle
05. 靜態(tài)庫(kù)中的自定義視圖
問(wèn)題:程序需要測(cè)試
靜態(tài)庫(kù)如何測(cè)試呢访锻?
創(chuàng)建復(fù)合項(xiàng)目
1>? 復(fù)習(xí)塊代碼傳值
06. 靜態(tài)庫(kù)的使用
新建項(xiàng)目將編譯生成的.a + .h拖到項(xiàng)目中使用
07. 靜態(tài)庫(kù)的種類(lèi)
靜態(tài)庫(kù)文件的版本(4種)
1.真機(jī)-Debug版本
2.真機(jī)-Release版本
3.模擬器-Debug版本
4.模擬器-Release版本
調(diào)試版本(Debug版本) VS 發(fā)布版本(Release版本)
- 調(diào)試版本會(huì)包含完整的符號(hào)信息,以方便調(diào)試
- 調(diào)試版本不會(huì)對(duì)代碼進(jìn)行優(yōu)化
- 發(fā)布版本不會(huì)包含完整的符號(hào)信息
- 發(fā)布版本的執(zhí)行代碼是進(jìn)行過(guò)優(yōu)化的
- 發(fā)布版本的大小會(huì)比調(diào)試版本的略小
- 在執(zhí)行速度方面通贞,調(diào)試版本會(huì)更快些朗若,但不意味著會(huì)有顯著的提升
08. 靜態(tài)庫(kù)的合并
# 檢測(cè).a的類(lèi)型
$ lipo -info libCZTools.a
# 合并.a
lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a
# 合并.a的好處恼五,開(kāi)發(fā)過(guò)程中既可以在真機(jī)上調(diào)試昌罩,也可以在模擬器上調(diào)試
# 合并.a的壞處,如果靜態(tài)庫(kù)太大灾馒,合并打包后茎用,會(huì)非常大,因此很多第三方的靜態(tài)庫(kù)的.a是區(qū)分版本的
# 今后在使用.a時(shí)一定注意版本