静态库和动态库的存在形式
静态库: .a 和 .framework
动态库: .dylib 和 .framework
静态库和动态库的使用区别:
静态库:链接时,静态库会被完整地复制到可执行文件中,缺点:【被多次使用,就有多份冗余拷贝】
动态库:链接时不复制,程序运行时由系统动态加载到内存里,供程序调用,系统只加载一次!多个程序共享资源,节约内存!
注意:项目中如果使用了自制的动态库,不能被上传到AppStore, 除非你越狱了。
.a 静态库 和 .framework的异同:
共同点: 最终都是转化为二进制文件+.h 文件+其它文件,才能使用。
不同点: .a 本身是一个二进制文件,需要配上.h 和其它资源文件才能使用;.framework 本身已经包含了 .h 和其它资源文件。它包含了所有东西。
静态库的特点
.a + .h ,.a配合上公共的 .h 文件,我们可以获取到.a 中暴露的方法或者成员等,你不能控制加载的方式和时机.
在编译静态库时,需要编译两个版本 -> 真机(arm) | 模拟器(i386)
静态库中的资源包的使用
由于Xcode默认在编译时会把所有的素材文件导入到mainBundle中,为了避免与使用静态库的程序冲突。
在静态库中如果要使用图片素材,会利用bundle的手段
1> 建立bundle,并且向其中添加图片
2> 创建一个类方法,返回图片
3> 编译
4> 调用方如果需要使用,需要导入 .h + .a + XXX.bundle
制作.a静态库步骤:
1.创建一个静态库工程


2.倒入已经创建好的文件
我把自动生成的文件删除了,因为那个并没什么卵用

根据我的步骤添加项目

接下来会多出这样一个头文件夹

暴漏.h头文件

默认是加入到了Project文件夹,手动拖到Public里就好了


静态库分真机和 模拟版本的

真机版本analyze一下

Product文件夹下的就由红色变为黑色了 证明真机版本已经生成成功了



模拟器版本的和真机的步骤一样,我就不赘述了

合并真机和模拟器版本

使用命令行lipo -create合并

如果你的类里没有图片、xib和其他资源那可以到此为止了,如果有,就需要进行下面的操作,生成bundle文件夹
未完待续......
网友评论