iOS静态库简介

来源:互联网 发布:阿里云服务器怎么换ip 编辑:程序博客网 时间:2024/06/15 23:16

一、静态库架构问题

不同设备使用的CPU不同,从而使用的CPU架构(指令集)也不同,静态库有其支持的CPU架构,若静态库在不支持的CPU架构上运行程序就会崩溃。

1、模拟器使用的CPU架构:
iphone4s - iphone5 : i386
iPhone5s - iPhone7plus :x86_64

2、真机使用的CPU架构:
iPhone3gs - iPhone4s:armv7
iPhone5 - iPhone5c:armv7s
iPhone5s - iPhone7plus:armv64
注意:只要支持armv7的静态库可以就可以在armv7s上正常运行,因为armv7兼容armv7s.

3、查看静态库支持的架构:lipo -info 静态库名称

4、合并静态库:lipo -create 静态库1 静态库2 -output 合并后的静态库名称


二、静态库简介

什么是库:库是程序代码的集合,是共享程序代码的一种方式。根据源代码的公开情况,库可以分为2种类型:开源库、闭源库。

开源库:作者公开源代码,能够看到代码的具体实现,如AFNetworking、MJExtension等。
闭源库:作者不公开源代码,是经过编译后的二进制文件,看不到具体实现。如百度地图、高德地图等

闭源库分两种:静态库和动态库
静态库:以.a和.framework两种形式存在
动态库:以.dylib和.frmaework两种形式存在

静态库和动态库使用上的区别
静态库:使用时静态库会被完整的复制到可执行文件中,使用多少次就会拷贝多少份,这样会造成冗余拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

从上面可以看出,动态库的使用会更好的节省内存,优化性能。但是苹果规定 项目中不能使用自制的动态库,否则不能上架到AppStore。

静态库的种类:
1、真机-Debug版本
2、真机-Release版本
3、模拟器-Debug版本
4、模拟器-Release版本

调试版本(Debug版本) 和 发布版本(Release版本)的区别:
1、调试版本会包含完整的符号信息,以方便调试,
2、调试版本不会对代码进行优化,
3、 发布版本不会包含完整的符号信息,
4、发布版本的执行代码是进行过优化的,
5、发布版本的大小会比调试版本的略小,
6、 在执行速度方面,发布版本会更快些,但不意味着会有显著的提升。


三、.a形式的静态库制作

1、打开Xcode -> create a new Xcode project -> framework & Library -> Cocoa Touch Static Library 创建.a形式的静态库。

这里写图片描述

2、直接选择模拟器然后command+B运行,就可以生成模拟器版静态库。但是在此之前一定要将Build Settings-Architecures-Build Active Architecture Only致为NO(如下图),这样才能保证模拟器版的静态库支持i386 和x86_64架构。真机版的静态库直接选择真机然后command+B运行就可以得到。这样得到的都是Debug版本的静态库。

这里写图片描述

release版本静态库:点击项目名称选择Edit Scheme,进入到如下界面。设置为release,分别在模拟器和真机下command+B运行就可得到release版本的静态库。

这里写图片描述

3、暴露静态库的.h文件

这里写图片描述

这里写图片描述

4、查看静态库支持的架构。在项目有个Products文件夹,它里面会有一个小房子样式的.a文件,右键show in Finder,就可以找到生成的静态库。在终端查看所支持的架构

这里写图片描述

这里写图片描述

5、合并模拟器版和真机版的静态库

这里写图片描述

合并.a的好处,开发过程中既可以在真机上调试,也可以在模拟器上调试
合并.a的坏处,如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的。

6、将静态库拖入到项目中,导入头文件就可以使用了。

静态库中BuyProduct.h文件

#import <Foundation/Foundation.h>@interface BuyProduct : NSObject+ (void)buyProduct:(NSString *)product;@end

静态库中BuyProduct.m文件

#import "BuyProduct.h"@implementation BuyProduct+ (void)buyProduct:(NSString *)product{    NSLog(@"%@", product);}@end

导入项目中后使用静态库

这里写图片描述


三、.framework形式的静态库制作

这里只介绍和.a静态库不同的地方,其他参考上述内容

1、系统默认创建的.framework形式的库是动态库,所以要做如下修改确保生成的而是静态库。

这里写图片描述

2、暴露.h文件

这里写图片描述

3、.framework静态库会自动创建一个主头文件,将你需要暴露的借口文件(.h)包含在主头文件下,别人用你的静态库只需要导入主头文件就可以。

这里写图片描述

这里写图片描述


四、开发静态库

这里写图片描述

创建你所需要的静态库(.a或.framework),这样就可以边调试,边开发静态库。

0 0
原创粉丝点击