函数库分为静态库和动态库两种。
静态库:即静态链接库。以.a 为文件后缀名。在程序编译时会被链接到目标代码中,程序运行时将不再需要该静态库。
动态库:即动态链接库。以.tbd(之前叫.dylib) 为文件后缀名。在程序编译时并不会被链接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在
在Mac OS和iOS中,除了.a和.tbd后缀的,还可以用.Framework后缀的,Framework 实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。
在 iOS 8 之前,出于安全的考虑,开发者可以使用的Framework 只有苹果自家的Framework,iOS 平台不支持使用自己生成的动态Framework。如果开发者想要在 iOS 平台共享代码,唯一的选择就是打包成静态库 .a 文件,同时附上头文件(例如微信的SDK和支付宝SDK)。iOS 8/Xcode 6 推出之后,iOS 平台添加了动态库的支持,同时 Xcode 6 也原生自带了Framework 支持。之所以支持了使用自己的Framework,是因为Extension(扩展)的出现。Extension 和 App 是两个分开的可执行文件,同时需要共享代码。
区别:静态库代码装载的速度快,执行速度略比动态库快。但是动态库更加节省内存,可执行文件体积比静态库小很多。静态库是在编译时加载,动态库是在运行时加载。
网友评论