iOS静态库的封装

静态库和动态库区别:

  • 静态库:连接时完整地拷贝至可执行文件中,被屡次使用就有多份冗余拷贝。
  • 动态库:连接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

.a与.framework有什么区别

  • .a是一个纯二进制文件,.framework中除了有二进制文件以外还有资源文件。
  • .a文件不能直接使用,至少要有.h文件配合,.framework文件能够直接使用,建议用.framework。
.a + .h + sourceFile = .framework。
复制代码

.a静态库的制做

咱们直接建立调试项目,通常不直接建立静态库。由于须要打断点,等调试成功后再打包相应的静态库。git

1.建立一个普通项目

建立项目,而且在项目中添加 static library,最终以下图所示。github

2.设置可见的.h文件。

Build Phases --> Copy Files 添加.h文件便可。bash

3.修改支持的架构

设置支持全部模拟器架构 Build Settings --> Build Active Architecture Only --> Debug 改成 NO,设置支持全部手机架构。markdown

4.而后编译

选中PrintTarget,而后分别选择Generic iOS Device任意一个模拟器各编译一次,编译完后,咱们会看到工程中Products文件夹下的libPrint.a由红色变成了黑色,而后show in finder,看看生成的文件。架构

5.将模拟器和真机的静态库合并

  • 可使用lipo-info + 静态库名字命令查看静态库支持的框架。
  • 若是想要让模拟器和真机通用一个静态库,咱们可使用终端命令来实现。命令格式:lipo -create 第一个.a文件的绝对路径 第二个.a文件的绝对路径 -output 最终的.a文件路径

.framework静态库的制做

1.建立一个普通项目

2.修改打包的framework是动态库仍是静态库

framework项目默认是动态库。 静态库配置:Build Settings --> Mach-O Type --> 改成 Static Library。 设置支持全部模拟器架构 Build Settings --> Build Active Architecture Only --> Debug 改成 NO,设置支持全部手机架构。框架

3.编写代码,设置可见头文件

编写完代码后,Build Phases --> Headers --> public 添加头文件。oop

4.而后编译

选中LibTestTarget,而后分别选择Generic iOS Device任意一个模拟器各编译一次,编译完后,咱们会看到工程中Products文件夹下的LibTest.framework由红色变成了黑色,而后show in finder,看看生成的文件。ui

5.将模拟器和真机的静态库合并

  • 可使用lipo -info framework下的二进制文件名字命令查看静态库支持的框架。
  • 若是想要让模拟器和真机通用一个静态库,咱们可使用终端命令来实现。合并的命令为: lipo -create 第一个framework下二进制文件的绝对路径 第二个framework下二进制文件的绝对路径 -output 最终的二进制文件路径

6.注意

注意: 若是静态库中有category类,则在使用静态库的项目配置中Other Linker Flags须要添加参数-ObjC或者-all_loadspa

完整Demo地址

github: github.com/CaoXueLiang…调试

相关文章
相关标签/搜索