库
库就是程序代码的集合,将N个文件组织起来,是共享程序代码的一种方式。
库的分类
开源库
源代码是公开的,可以看到每个实现文件的实现,例如GitHub上的常用的开源库:AFNetworking、SDWebImage等;
闭源库
不公开源代码,是经过编译后的二进制文件,看不到具体的实现。闭源库又分为静态库
和动态库
。
静态库
存在的形式
.a
.framework
使用方式
//.a : 可以看做所有实现文件加密后的一个二进制文件
//.h : 头文件用户暴露可用的接口(方法)
.a + .h
动态库
存在的形式
.dylib
.framework
静态库和动态库的区别
- .a文件肯定是静态库,.dylib肯定是动态库,.framework可能是静态库也可能是动态库;
- 静态库在链接时,会被完整的复制到目标程序中,如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是使应用程序变大,浪费内存。
- 动态库不会复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多个程序共用一份,编译时只存储了指向动态库的引用,节约了内存。与此同时,也有相应的缺点,即运行时加载会损耗部分性能,并且依赖外部的环境,如果库不存在或者版本不正确则无法运行。
Framework
实际上是一种打包方式,将库的二进制文件、头文件和有关的资源文件打包到一起,方便管理和分发。
.a + .h + .bundle = .framework
使用方式
使用.a时需要同时将.a 和 .h 文件拖入到工程中,使用.framework时直接将这个文件夹拖入进去即可,因为.framework文件夹中已经包含了.h文件。
网友评论