什么是库?
库 就是程序代码的集合, 是共享程序代码的一种方式
库的分类?
- 开源库
公开源代码, 能看到具体实现。例如MJExtension, MJRefresh, AFNetworking... - 闭源库
不公开源代码, 是经过编译后的二进制文件, 看不到具体实现。主要分为: 静态库 和 动态库
静态库
静态库格式
.a 、.framework
静态库应用场景
- 保护自己的核心代码
- 将MRC的项目,打包成静态库, 可以在ARC下直接使用, 不需要转换
- 提高工程的编译速度
静态库的特点?
- .a + .h
- 看不到具体实现的代码
静态库的制作(.a)
1. 创建项目时, 直接选择StaticLibrary
2. 设置需要暴漏的头文件 ➡️ TARGETS ➡️ Build Phases ➡️ Copy Files 把需要暴漏的头文件添加进来即可
3. 在模拟器环境下编译(得到模拟器环境下的静态库)
4. 在真机环境下编译(得到真机环境下的静态库)
5. 一次编译支持多个架构的的静态库 ➡️ Build Settings -> Build Active -> NO
// 查看不同机型cpu架构信息
lipo -info 库文件路径
// 合并静态库
lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a
//拆分指定架构的库
lipo -thin 架构名称 库路径 -output 目标路径
//从合成库移除某个架构
lipo -remove 架构名称 库路径 -output xx
//查看库信息
file 库路径
静态库制作(.framework)
1.新建工程, 直接选择framework
2.一次编译支持多个架构的的静态库 ➡️ Build Settings -> Build Active -> NO
3.默认制作的是动态库, 需要设置链接类型 target -> Build Settings-> 搜索 Mach-o Type ; 改为静态库
4.暴露头文件 TARGETS ➡️ Build Phases ➡️ header ➡️ 从project里拖到public里
.a静态库和.framework静态库的区别?
- .a是一个纯二进制文件, .framework中除了有二进制文件之外还有资源文件
- .a文件不能直接使用, 至少要有.h文件的配合; .framework文件可以直接使用
- .a + .h + sourceFile = .framework
动态库
动态库格式
.framework 、.dylib 、 .tbd
静态库和动态库的区别?
- 静态库在链接时, 会被完整的复制到可执行文件中; 被多次使用, 就会多份拷贝
- 动态库则不会复制, 只有一份. 程序运行时动态加载到内存; 系统只加载一次, 多个程序共用, 节省内存
- ‼️项目中如果使用到自己的动态库, 不允许上架,但是!!! WWDC2014上公布的 苹果对ios8开放动态加载dylib的接口 也就是说 开放了动态库挂载
网友评论