iOS开发-Xcode5创建静态库详解(Cocoa Touch Static Library)

iOS开发-Xcode5创建静态库详解(Cocoa Touch Static Library)

分类: iphone应用开发学习笔记   246人阅读  评论(0)  收藏  举报

目录(?)[+]

科普--->什么是iOS静态库?


如果你作为iOS开发者已经有一段时间,可能会有一套属于自己的类和工具函数,它们在你的大多数项目中被重用。重用代码的最简单方法是简单的 拷贝/粘贴 源文件。然而,这种方法很快就会成为维护时的噩梦。因为每个app都有自己的一份代码副本,你很难在修复bug或者升级时保证所有副本的同步。这就是静态库要拯救你的。一个静态库是若干个类,函数,定义和资源的包装,你可以将其打包并很容易的在项目之间共享。

程序编译一般需经预处理、编译、汇编和链接几个步骤。对于我们项目中的一些公共代码,如果想要对其进行复用,可以把这些代码编译成一个静态库文件。在链接步骤中,链接器会从库文件中取得对应的代码并生成可执行文件。静态库的执行文件中包含了库中的完整代码,但是多次使用会产生多份冗余拷贝。

静态库和动态库的区别在于静态库在链接阶段被复制,与程序的运行阶段无关;动态库在程序运行时由系统动态加载到内存中供程序调用,这样可以大大节省内存。

创建静态库可能出于以下几个理由:
1.你想将一些你和你团队中的同事们经常使用的类打包并轻松的分享给周围其他人。
2.你想让一些通用代码处于自己的掌控之下,以便于修复和升级。
3.你想将库共享给其他人,但不想让他们看到你的源代码。



如果, 你还想继续创建一个静态库, 那就接着往下看吧。

Xcode5创建静态库详解(Cocoa Touch Static Library)


一。创建静态库文件

1.新建工程。

打开Xcode, 选择File ----> New ---> Project。 新建工程。

选择iOS ----> Framework & Library ---> Cocoa Touch Static Library。

点击Next。创建工程。 这里我取名为LibTest。

如图所示:


2.在LibTest.h中添加方法声明

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  LibTest.h  
  3. //  LibTest  
  4. //  
  5. //  Created by Colin on 14-4-6.  
  6. //  Copyright (c) 2014年 icephone. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. @interface LibTest : NSObject  
  12.   
  13. -(void)LibPrintTest;  
  14.   
  15. @end  

3.在LibTest.m中实现方法

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  LibTest.m  
  3. //  LibTest  
  4. //  
  5. //  Created by Colin on 14-4-6.  
  6. //  Copyright (c) 2014年 icephone. All rights reserved.  
  7. //  
  8.   
  9. #import "LibTest.h"  
  10.   
  11. @implementation LibTest  
  12.   
  13. -(void)LibPrintTest  
  14. {  
  15.     NSLog(@"This is my first static library");  
  16. }  
  17.   
  18. @end  

4.在 iOS Device(设备)中编译。


如图所示。选择完毕后,进行编译。(可以通过快捷键command+B, 也可以Product ----> Build )

编译完成后, 可以看到Products目录下的 libLibTest.a 由红变黑, 说明用于设备使用的静态库已经生成成功了。

如图所示。



5.在 iOS Simulator(模拟器)中编译

同样, 选择相应的模拟器。 比如iPhone Retina(4-inch 64-bit)进行编译, 编译后会生成用于模拟器的静态库文件。


6.查看静态库。

右键选择libLibTest.a ---> Show In Finder。

可以看到生成了两份静态库, 一份用于设备, 一份用于模拟器。



二。在模拟器中使用静态库

1.导入静态库和头文件

在你需要加入静态库的工程中, 导入相应的导入静态库和头文件。

如图所示。


2.添加头文件以及调用方法。

在需要使用的地方, 添加头文件, 并且调用。如下所示。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  ViewController.m  
  3. //  FuckTest  
  4. //  
  5. //  Created by Colin on 14-4-5.  
  6. //  Copyright (c) 2014年 icephone. All rights reserved.  
  7. //  
  8.   
  9. #import "ViewController.h"  
  10. #import "LibTest.h"  
  11.   
  12. @interface ViewController ()  
  13.   
  14. @end  
  15.   
  16. @implementation ViewController  
  17.   
  18. - (void)viewDidLoad  
  19. {  
  20.     [super viewDidLoad];  
  21.       
  22.     LibTest *myTest = [[LibTest alloc]init];  
  23.     [myTest LibPrintTest];  
  24. }  
  25.   
  26. - (void)didReceiveMemoryWarning  
  27. {  
  28.     [super didReceiveMemoryWarning];  
  29. }  
  30.   
  31. @end  

好了, 这个时候你运行的话, 会看到控制台输出

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. This is my first static library  

这表面我们的静态库调用成功。


三。在设备中使用静态库文件


这个过程与上述模拟器中使用静态库文件的过程一样,唯一的区别就是需要使用用于设备的静态库文件!


注:

模拟器静态库只能运行在模拟器上而真机静态库也只能运行在真机上,这样就比较麻烦,通过下面的步骤将两个静态库合成一个,这样在模拟器和真机上都能用了。

*四。合并.a文件,制作通用静态库

这一步在终端进行(Finder--->应用程序---->实用工具打开终端)
命令如下:

lipo -create /Users/apple/Library/Developer/Xcode/DerivedData/LibTest-ezgewgrmngvyymexmouyvqiwyizd/Build/Products/Debug-iphoneos/libLibTest.a/Users/apple/Library/Developer/Xcode/DerivedData/LibTest-ezgewgrmngvyymexmouyvqiwyizd/Build/Products/Debug-iphonesimulator/libLibTest.a -output/Users/apple/Desktop/myLibTest.a

/Users/apple/Library/Developer/Xcode/DerivedData/LibTest-ezgewgrmngvyymexmouyvqiwyizd/Build/Products/Debug-iphoneos/libLibTest.a/Users/apple/Library/Developer/Xcode/DerivedData/LibTest-ezgewgrmngvyymexmouyvqiwyizd/Build/Products/Debug-iphonesimulator/libLibTest.a替换成你的路径。
/Users/apple/Desktop/myLibTest.a替换成合并后的路径。
如图所示。


这样合并后的静态库就可以在模拟器和真机上运行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值