科普--->什么是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中添加方法声明
//
// LibTest.h
// LibTest
//
// Created by Colin on 14-4-6.
// Copyright (c) 2014年 icephone. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface LibTest : NSObject
-(void)LibPrintTest;
@end
3.在LibTest.m中实现方法
//
// LibTest.m
// LibTest
//
// Created by Colin on 14-4-6.
// Copyright (c) 2014年 icephone. All rights reserved.
//
#import "LibTest.h"
@implementation LibTest
-(void)LibPrintTest
{
NSLog(@"This is my first static library");
}
@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.添加头文件以及调用方法。
在需要使用的地方, 添加头文件, 并且调用。如下所示。
//
// ViewController.m
// FuckTest
//
// Created by Colin on 14-4-5.
// Copyright (c) 2014年 icephone. All rights reserved.
//
#import "ViewController.h"
#import "LibTest.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
LibTest *myTest = [[LibTest alloc]init];
[myTest LibPrintTest];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
好了, 这个时候你运行的话, 会看到控制台输出
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替换成合并后的路径。
如图所示。
这样合并后的静态库就可以在模拟器和真机上运行了。
学习的路上,与君共勉。