04动态库和静态库

本人做过 SDK, 对此感悟很深, 很多方法直接用得上的, mark 一下
库是共享程序代码的方式, 一般分为动态库和静态库
静态库: 链接时完整地拷贝至可执行文件中, 被多次使用就有多份冗余拷贝
动态库:链接时不复制, 程序运行时由系统动态加载到内存, 供程序调用, 系统只加载一次, 多个程序共用, 节省内存
iOS 静态库: .a 和. framework
iOS 动态库: .dylib 和. framework
系统的. framework 是动态的, 我们自己建立的.framework 是静态库
.a 和. framework 有啥区别?
.a 是一个纯二进制文件, .framework 中除了二进制资源之外, 还有资源文件
.a 文件不能直接使用, 至少要有. h 文件配合, .framework 文件可以直接使用
也就是 .a+.h +sourceFile = .framework
为啥要使用静态库,
方便共享代码, 便于合理使用
实现 iOS 程序的模块化, 可以把固定的业务模块化成静态库
对外提供接口, 但是不让别人看到你的实现
开发第三方 SDK 的需要
制作静态库时注意
1.注意理解.无论是. a静态库还是. framework 静态库, 我们需要的都是二进制文件+. h 和其他资源文件的形式, 不同的是, .a 本身就是二进制文件, 需要我们自己配上. h 和其他文件才能使用
而. frame 本身已经包含了. h 和其他的文件, 可以直接使用
2.图片资源的处理, 两种静态库, 一般都是把图片文件单独地放在一个. bundle 文件中, 一般. bundle 和. a 和. framework 的名字一样. .bundle 文件很好弄, 新建一个文件夹, 把它名字改成. bundle 就可以了, 右键, 显示包内容可以向其中添加图片资源
3.category 是我们实际开发中项目经常用到的, 把 category 打成静态库是没有问题的, 但是用在一个静态库的工程中, 调用 category 中的方法会有找不到该方法的运行时错误, selector unrecognized, 解决办法是:在使用静态库的工程中配置other linker flags的值为-ObjC。
4 如果一个静态库很复杂,需要暴露的.h比较多的话,就可以在静态库的内部创建一个.h文件(一般这个.h文件的名字和静态库的名字相同),然后把所有需要暴露出来的.h文件都集中放在这个.h文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。

你可能感兴趣的:(04动态库和静态库)