06.iOS 静态库的封装和使用
2016-01-16 本文已影响1431人
Liwx
@(〓〓 iOS-实用技术)[静态库/动态库封装]
- 作者: Liwx
- 邮箱: 1032282633@qq.com
目录
- 06.iOS 静态库的封装和使用
- 1.iOS 库的基本概念
- 静态库和动态库
- 2.静态库的封装
- .a静态库的封装
- 编译Debug/Release 模拟器/真机版本的静态库
- 合并静态库
- .framework静态库的封装
- .framework静态库的使用
- .a静态库的封装
1.iOS 库的基本概念
库就是程序代码的集合,是共享程序代码的一种方式.
静态库和动态库
-
1.iOS中静态库和动态库文件的后缀名
- 静态库文件后缀名:
.a
和.framework
- 动态库文件后缀名:
.dylib
和.framework
- 静态库文件后缀名:
-
2.静态库和动态库的区别
-
动态库则不会复制, 只有一份
. 程序运行时动态加载到内存;系统只加载一次
, 多个程序共用, 节省内存; - 但是项目中如果
使用到自己的动态库
,不允许上架
!
但是WWDC2014上公布的苹果对ios8开放动态加载dylib的接口
,也就是说 开放了动态库挂载
. -
静态库在链接时
, 会被完整的复制到可执行文件中
; 被多次使用, 就有多份拷贝
;
-
2.静态库的封装
.a静态库的封装
- 1.创建工程选择
iOS/Framework & Library
,选择Coaoa Touch Static Library
- 2.设置对外公开的头文件
- 3.设置让所有架构都能正常编译和使用
- 5.创建一个Log类,实现接口方法,并在.h文件中对外提供接口方法
// Log.h文件中提供接口
+ (void)wxLog;
// Log.m文件中实现方法
+ (void)wxLog
{
NSLog(@"Test Lib");
}
04.创建一个Log类.png
- 6.使用快捷键
command + b
编译静态库(当前运行选择为模拟器),编译成功后找到库存储路径.
05.静态库生成的路径.png进入静态库生成的路径中
06.Build:Products:Debug-iphonesimulator文件夹.png以上操作弹出窗口后进入
Build/Products/Debug-iphonesimulator
文件夹中,.a的库文件
和对外公开的头文件
就存放在该目录下.因为刚才是处于Debug模式下选择模拟器运行环境,所以生成的Debug-iphonesimulator文件夹
- 7.确保生成的静态库能在你所有模拟器上运行,先查看静态库支持的平台.
- 使用
lipo -info
查看库所支持的架构.i386 x86_64
: 表示能在所有模拟器上运行. - 模拟器架构:
iPhone 4s - iPhone 5是i386架构
,iPhone 5s - iPhone 6s Plus是x86_64架构
.
- 使用
- 8.静态库的使用.只需将生成的.a文件和.h文件拖入到测试静态库的工程即可使用静态库.
编译Debug/Release 模拟器/真机版本的静态库
- 1.设置要编译成Debug还是Release版本的静态库.如果是要生成Release就选择Release
- 2.设置要编译成真机还是模拟器版的静态库
- 3.如果四种情况的静态库都进行编译,则会生成以下四个文件夹
合并静态库
- 1.使用lipo -create ... -output ... 合并静态库.最终合并的静态库的大小相当于Debug Device.a和Debug Simulator.a的总和.
.framework静态库的封装
- 1.创建工程选择
iOS/Framework & Library
,选择Coaoa Touch Framework
- 2.删除自动生成的头文件.
注意
: Info.plist不能删除
16.删除自动生成的头文件.png
- 3.创建Tool类,并对应提供log类方法,实现log类方法
// Tool.h文件中提供接口
+ (void)log;
// Tool.m文件中实现方法
+ (void)log
{
NSLog(@"framework Test");
}
- 4.设置要生成的.framework文件为静态库
- 5.设置支持所有架构
- 6.设置要公开的所有头文件
.framework静态库的使用
- 1.创建一个测试静态库的工程,生成的.framework的静态库拖入到工程
- 2.使用
尖括号<>
导入头文件之后就能正常使用.framework的静态库-
注意
: 导入头文件为#import <Framework/Tool.h>
-