引言
在开发中.framework静态库还是比较常见的,比如:SDK,公司间的代码合作等。我们可以把一些不愿意让别人见到的代码,用静态库的方式把它隐藏起来,只留下.h文件显示方法供编程人员使用。而.a文件出了静态库本身外,还需要引入.h文件,而.framework就不需要如此,由于.framework的方便性所以一般情况下我们见到的较多。
什么是库
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。
iOS中的静态库有 .a 和 .framework两种形式;动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式。
静态库与动态库的区别
静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。
Bundle文件
Bundle文件可以用于存放资源文件,可用于多人合作开发,避免资源重名。里面可以存储xib文、资源图片等。Bundle文件是静态的,不进行编译的。所以使用Bundle中的资源,就需要找到相应的资源路径。另外,我看别人博客上是说,.a
文件中是无法用Bundle文件的,只能另存一个文件;Framework静态库可以用Bundle文件;我也没试过,请试过的小伙伴留言告诉我,我就偷个懒,嘿嘿
总结:同一个静态库在不同程序中使用时,每一个程序中都得导入一次,打包时也被打包进去,形成一个程序。而动态库在不同程序中,打包时并没有被打包进去,只在程序运行使用时,才链接载入(如系统的框架如UIKit、Foundation等),所以程序体积会小很多,但是苹果不让使用自己的动态库,否则审核就无法通过。
一、创建 .a 静态库
1. 新建工程。比如我们的工程名叫PSSTest,那么我们创建的.a静态库的名字最好就是前面加个lib,如libPSSTest.a。
新建工程 (选中xcode,按commond + shift + N)
此时工程目录是这个样子,.a文件还没有被创建,因此是红色的
你可以把图中
libPSSTest.h
和.m
换成你自己要生成库的文件(可以是多个),在这里我就不换了,就用这两个文件,我们在.h
文件中添加一个方法+sayHello
,并在.m
中实现它
// 一定要记得在.h中声明哦
+ (void)sayHello
{