成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS 靜態庫開發

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

簡介

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

靜態庫和動態庫的存在形式

靜態庫:.a 和 .framework
動態庫:.dylib 和 .framework

靜態庫和動態庫的區別

靜態庫:鏈接時,靜態庫會被完整地復制到可執行文件中,被多次使用就有多份冗余拷貝
動態庫:鏈接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存

注意:項目中如果使用了動態庫,會蘋果拒接

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

  • 真機-Debug版本
  • 真機-Release版本
  • 模擬器-Debug版本
  • 模擬器-Release版本

Debug(調試)版本

1.含完整的符號信息,以方便調試
2.不會對代碼進行優化

Release(發布)版本

1.不會包含完整的符號信息
2.的執行代碼是進行過優化的
3.的大小會比Debug版本的略小
4.在執行速度方面,Release版本會更快些(但不意味著會有顯著的提升)

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

設備的CPU架構簡介(補充知識)

模擬器:

4s~5 : i386
5s~6plus : x86_64

真機:

3gs~4s : armv7
5~5c : armv7s (靜態庫只要支持了armv7,就可以跑在armv7s的架構上)
5s~6plus : arm64

制作靜態庫 - Debug版

1.新建項目
2.添加靜態庫并命名

3.需要打包到進靜態庫的代碼,放在這個文件夾內

4.重新創建測試類(HSCalculate),提供外界計算兩個數和的方法

HSCalculate.h

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

HSCalculate.m

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

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

6.打包支持模擬器和真機的靜態庫(分別選擇真機和模擬器運行,就會生成對應的靜態庫)

7.查看打包好的靜態庫

兩個文件夾,里面的.a文件就是打包好的靜態庫

Debug-iphoneos : 真機
Debug-iphonesimulator:模擬器

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

  1. lipo -info xxx.a 

分別查看打包好的模擬器與真機的靜態庫所支持的cpu架構

你會發現模擬器的靜態庫少了4s~5 : i386架構

原因:

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

修改完后,重新編譯:

8.在本項目對該靜態庫進行調試,ViewController.m導入HSCalculate.h,測試運行,你會發現報錯了

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

報錯:

原因:

需要導入靜態庫(編譯即可運行成功)

9.同時支持真機與模擬器的靜態庫(需要合并)

真機和模擬器的靜態庫,是不一樣的,不能同時適用在真機和模擬器上,但要滿足這要求的話,要對編譯好的兩個靜態庫進行合并

合并好壞:

好:開發過程中既可以在真機上調試,也可以在模擬器上調試
壞:如果靜態庫太大,合并打包后,會非常大,因此很多第三方的靜態庫的.a是區分版本的

合并產生新的靜態庫:

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

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

Snip20150830_26.png

新建工程測試:

Snip20150830_28.png

制作靜態庫 - Release版

跟Debug版步驟一樣,只不過在編譯時,改下面的選項即可


制作靜態庫 - .framework版

步驟跟制作.a靜態庫,基本一致,但要注意的下面幾點:

1.選擇framework

Snip20150830_32.png

2.編譯時,默認制作成動態庫,要在下面選擇

Snip20150830_33.png

3.合并靜態庫時,是選.framework文件里的libstaticlib文件

合并:

刪除libstaticlib,libCalculateTool拉入libstaticlib.framework項目中,libstaticlib.framework靜態庫制作完成

責任編輯:倪明 來源: 簡書
相關推薦

2015-09-11 11:02:23

ios靜態庫開發

2013-04-08 10:27:59

iOSXcode制作靜態庫

2011-07-22 16:15:11

IOS 靜態類

2011-07-21 11:05:18

iOS 族譜 Cocoa

2011-09-06 16:30:32

iOS系統靜態鏈接庫

2013-07-25 13:30:35

iOS開發學習讀取照片庫

2011-08-22 15:43:08

IOS開發數據庫

2011-08-22 16:08:46

IOS開發數據庫

2015-02-11 18:02:59

iOS源碼Swift圖表庫

2013-04-01 10:49:51

iOS開發sqlite數據庫

2014-05-13 10:12:17

iOS開發開源類庫

2014-07-30 14:37:00

FacebookiOS開源庫

2013-07-21 18:04:22

ASIHttpRequiOS開發

2011-06-09 11:11:35

QT 靜態庫 動態庫

2019-04-12 08:10:33

iOS靜態分析Xcode

2010-01-07 17:36:38

Linux靜態庫

2010-03-04 10:17:57

Linux動態庫

2013-09-12 15:02:54

iOS開發者

2011-08-10 15:36:26

iPhone靜態庫控件

2014-03-06 15:49:36

iOS開源庫匯總
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久91 | 男女羞羞视频大全 | 亚洲国产精品视频 | 国内精品久久久久 | 一区二区三区四区国产 | 日韩三| 中文字幕免费在线 | 久久人人爽人人爽人人片av免费 | 国产精品一区二区无线 | 黄视频网站在线 | 精品麻豆剧传媒av国产九九九 | 国内久久精品 | 91九色porny首页最多播放 | 欧美精品v国产精品v日韩精品 | 成人日韩| 欧美日韩三级在线观看 | 久久精品国产久精国产 | 超碰人人爱 | 夜夜草 | 国产综合一区二区 | 91精品国产综合久久婷婷香蕉 | 中文字幕在线一区二区三区 | 国产电影一区二区在线观看 | 亚洲欧美日韩精品久久亚洲区 | 成年人在线播放 | 成年免费大片黄在线观看一级 | 国产精品国产精品 | 在线黄色影院 | 久久一 | 2022精品国偷自产免费观看 | 日韩有码一区 | 91亚洲国产亚洲国产 | 99精品99| 久久久久久亚洲精品 | 亚洲顶级毛片 | 欧美精品在线一区二区三区 | 欧美aⅴ在线观看 | 国产精品久久亚洲7777 | 日韩成人国产 | 天堂国产 | 亚洲欧美日韩成人在线 |