自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

全面了解iOS靜態(tài)庫開發(fā)

移動開發(fā)
在企業(yè)開發(fā)中,一些核心技術(shù)或者常用框架,出于安全性和穩(wěn)定性的考慮,不想被外界知道,所以會把核心代碼打包成靜態(tài)庫,只暴露頭文件給程序員使用(比如:友盟、百度地圖等第三方的sdk)

[[148702]]

簡介

在企業(yè)開發(fā)中,一些核心技術(shù)或者常用框架,出于安全性和穩(wěn)定性的考慮,不想被外界知道,所以會把核心代碼打包成靜態(tài)庫,只暴露頭文件給程序員使用(比如:友盟、百度地圖等第三方的sdk)

靜態(tài)庫和動態(tài)庫的存在形式

  • 靜態(tài)庫:.a 和 .framework

  • 動態(tài)庫:.dylib 和 .framework

靜態(tài)庫和動態(tài)庫的區(qū)別

  • 靜態(tài)庫:鏈接時(shí),靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多份冗余拷貝

  • 動態(tài)庫:鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個(gè)程序共用,節(jié)省內(nèi)存

注意:項(xiàng)目中如果使用了動態(tài)庫,會蘋果拒接

靜態(tài)庫文件的版本(4種)

  • 真機(jī)-Debug版本

  • 真機(jī)-Release版本

  • 模擬器-Debug版本

  • 模擬器-Release版本

Debug(調(diào)試)版本

  1. 含完整的符號信息,以方便調(diào)試

  2. 不會對代碼進(jìn)行優(yōu)化

Release(發(fā)布)版本

  1. 不會包含完整的符號信息

  2. 的執(zhí)行代碼是進(jìn)行過優(yōu)化的

  3. 的大小會比Debug版本的略小

  4. 在執(zhí)行速度方面,Release版本會更快些(但不意味著會有顯著的提升)

所以我們一般開發(fā)中都打包Release(發(fā)布)版本,提供外界

設(shè)備的CPU架構(gòu)簡介(補(bǔ)充知識)

模擬器:

  • 4s~5 : i386

  • 5s~6plus : x86_64

真機(jī):

  • 3gs~4s : armv7

  • 5~5c : armv7s (靜態(tài)庫只要支持了armv7,就可以跑在armv7s的架構(gòu)上)

  • 5s~6plus : arm64

制作靜態(tài)庫 - Debug版

1.新建項(xiàng)目

2.添加靜態(tài)庫并命名

blob.png

blob.png

3.需要打包到進(jìn)靜態(tài)庫的代碼,放在這個(gè)文件夾內(nèi)

blob.png

4.重新創(chuàng)建測試類(HSCalculate),提供外界計(jì)算兩個(gè)數(shù)和的方法

HSCalculate.h

  1. @interface HSCalculate : NSObject 
  2. + (NSInteger)sumNum1:(NSInteger)num1 num2:(NSInteger)num2; 
  3. @end 

HSCalculate.m

  1. #import "HSCalculate.h" 
  2. @implementation HSCalculate 
  3. + (NSInteger)sumWithNum1:(NSInteger)num1 num2:(NSInteger)num2 
  4.     return num1 + num2; 
  5. @end 

5.需要暴露給外界的文件(接口)

blob.png

#p#

6.打包支持模擬器和真機(jī)的靜態(tài)庫(分別選擇真機(jī)和模擬器運(yùn)行,就會生成對應(yīng)的靜態(tài)庫)

blob.png

7.查看打包好的靜態(tài)庫

blob.png

兩個(gè)文件夾,里面的.a文件就是打包好的靜態(tài)庫

  • Debug-iphoneos : 真機(jī)

  • Debug-iphonesimulator:模擬器

可用下面命令查看靜態(tài)庫支持的cpu架構(gòu)(可查看上面描述的cpu架構(gòu)類型)

  1. lipo -info xxx.a 

分別查看打包好的模擬器與真機(jī)的靜態(tài)庫所支持的cpu架構(gòu)

blob.png

你會發(fā)現(xiàn)模擬器的靜態(tài)庫少了4s~5 : i386架構(gòu)

原因:

下面Debug:Yes表示只編譯選中模擬器對應(yīng)的架構(gòu),No則為編譯所有模擬器支持的cup架構(gòu)(Debug的Yes狀態(tài)改為No即可)

blob.png

修改完后,重新編譯:

8.在本項(xiàng)目對該靜態(tài)庫進(jìn)行調(diào)試,ViewController.m導(dǎo)入HSCalculate.h,測試運(yùn)行,你會發(fā)現(xiàn)報(bào)錯(cuò)了

 
  1. #import "ViewController.h" 
  2. #import "HSCalculate.h" 
  3. @interface ViewController () 
  4. @end 
  5. @implementation ViewController 
  6. - (void)viewDidLoad { 
  7.     [super viewDidLoad]; 
  8.     NSInteger result = [HSCalculate sumWithNum1:23 num2:25]; 
  9.     NSLog(@"result: %d", result); 
  10. @end 

報(bào)錯(cuò):

blob.png

原因:

需要導(dǎo)入靜態(tài)庫(編譯即可運(yùn)行成功)

blob.png

9.同時(shí)支持真機(jī)與模擬器的靜態(tài)庫(需要合并)

真機(jī)和模擬器的靜態(tài)庫,是不一樣的,不能同時(shí)適用在真機(jī)和模擬器上,但要滿足這要求的話,要對編譯好的兩個(gè)靜態(tài)庫進(jìn)行合并

合并好壞:

  • 好:開發(fā)過程中既可以在真機(jī)上調(diào)試,也可以在模擬器上調(diào)試

  • 壞:如果靜態(tài)庫太大,合并打包后,會非常大,因此很多第三方的靜態(tài)庫的.a是區(qū)分版本的

合并產(chǎn)生新的靜態(tài)庫:

  1. lipo -create Debug-iphoneos/xxx.a Debug-iphonesimulator/xxx.a -output xxx.a 

10.把合并好的靜態(tài)庫和外界訪問的文件拉入到新工程,即可使用(inc文件自己建立的)

blob.png

新建工程測試:

blob.png

制作靜態(tài)庫 - Release版

跟Debug版步驟一樣,只不過在編譯時(shí),改下面的選項(xiàng)即可

blob.png

blob.png

制作靜態(tài)庫 - .framework版

步驟跟制作.a靜態(tài)庫,基本一致,但要注意的下面幾點(diǎn):

1.選擇framework

blob.png

2.編譯時(shí),默認(rèn)制作成動態(tài)庫,要在下面選擇

blob.png

3.合并靜態(tài)庫時(shí),是選.framework文件里的libstaticlib文件

blob.png

合并:

blob.png

刪除libstaticlib,libCalculateTool拉入libstaticlib.framework項(xiàng)目中,libstaticlib.framework靜態(tài)庫制作完成

blob.png

責(zé)任編輯:倪明 來源: 漢斯哈哈哈簡書
相關(guān)推薦

2015-09-01 10:37:54

ios靜態(tài)庫開發(fā)

2011-07-22 16:15:11

IOS 靜態(tài)類

2014-02-19 10:47:00

Android開發(fā)規(guī)范

2013-04-08 10:27:59

iOSXcode制作靜態(tài)庫

2009-12-15 13:42:22

GNU計(jì)劃

2010-09-03 10:04:51

PPP Multili

2011-08-02 10:36:02

iOS開發(fā) SDK 多媒體

2019-02-01 10:56:04

2014-02-26 14:24:40

iOSUIScrollVieUIview

2010-06-09 12:07:59

路由選擇協(xié)議

2010-07-01 16:52:19

CAN總線協(xié)議

2009-12-25 11:22:13

Linux進(jìn)程技術(shù)

2009-12-23 17:14:28

2010-07-09 13:09:48

UML靜態(tài)建模

2011-09-06 16:30:32

iOS系統(tǒng)靜態(tài)鏈接庫

2021-06-01 17:40:54

111

2010-01-05 15:32:33

2009-12-23 11:05:28

Linux內(nèi)核

2019-01-30 14:42:00

Apache服務(wù)器web服務(wù)器

2020-05-13 07:00:13

優(yōu)化云端方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號