iOS开发中的静态库、动态库、framework

日常开发中会用到各种各样的库,系统提供的库,第三方库等。库到底是什么?有哪些类型的库?

库可以理解成一个可执行文件,加上相应的头文件之后,开发者就可以直接使用。项目中,可以将一些变动很小的基础功能进行封装,打包成库,这样一方面可以减少编译时间(因为库是已经编译好的),另一方面,也可以隐藏代码的实现。

iOS开发中,库的类型有三种:静态库、动态库、framework。

静态库

静态库全称静态链接库,如Windows系统下的.lib文件,iOS系统下的.a文件,都是静态库。静态库在编译时,就会被复制到目标程序里,可以理解成在目标程序里复制了一份静态库的代码。显而易见的,静态库会增加安装包的大小。而且,如果不同的应用程序使用了相同的静态库,每个应用程序内部都会有该静态库。

项目中使用到静态库的情景是非常多的。比如说微信分享sdk,微博分享sdk,使用的都是静态库的形式。

iOS系统下,静态库是.a文件。通常情况下,一个静态库只有.a文件是不够的,因为静态库要提供给其他人使用,需要告诉其他人静态库提供的接口,因此还需要头文件.h文件。比如说,微博分享静态库如下:

微信分享静态库如下:
这里写图片描述

动态库

动态库全称动态链接库,如windows系统下的.dll文件,iOS、Mac OS系统下的.dylib、.tbd文件,都是动态链接库。相对于静态库来说,在编译时,动态库并不会被复制到目标程序中,只是在目标程序中保留了一个动态库的索引。等到程序运行时,动态库才会被真正的加载到内存中。

和静态库相比,动态库不会增大安装包的体积,而且多个应用程序可以使用同一个动态库。

Mac OS系统下,在/usr/lib目录下,存放了大量供系统与应用程序调用的动态库文件。
这里写图片描述

framework

除了静态库和动态库外,日常开发中还会使用到大量的framework,framework和静态库、动态库相比有什么区别呢?

framework是一种打包方式,将静态库、动态库的可执行文件、头文件,以及相关的资源文件打包到一个包中,方便管理。因此,framework既可以表示静态库,也可以表示动态库。系统提供了很多的framework供开发者日常使用,如UIKit.framework、WebKit.framework、ImageIO.framework等。由上面的介绍,很容易猜到,系统提供的framework都是动态库。项目中当然也可以创建自己的framework,开发者创建的framework通常是静态库。项目中使用到的一些framework:
这里写图片描述
framework通常会包含该库对应的头文件,
这里写图片描述

总结

上面介绍了iOS开发中的库,项目开发中,使用自定义静态库的情况比较多,如.a库,framework静态库等;无论是.dylib文件,还是framework动态库,动态库通常是系统提供。

猜你喜欢

转载自blog.csdn.net/TuGeLe/article/details/80627790