关于iOS动态库
Overview
动态库概述
决定应用程序性能的两个重要因素是它们启动时间和它们的内存占用量。减少应用程序可执行文件的大小,并在启动后最大程度地减少其内存使用量,使该应用程序启动熟读更快,并在启动后使用较少的内存。使用动态库而不是静态库可减少应用程序的可执行文件大小。他们还允许应用程序仅在需要时而不是在启动时才延迟具有特殊功能的库加载。此功能进一步有助于缩短启动时间和有效使用内存。
本文介绍了动态库,并说明了如何使用动态库而不是静态库来减少应用程序文件大小和初始内存占用。本文还概述了应用程序在运行时用于动态库加载程序兼容性功能。
什么是动态库?
应用程序的大多数功能都是在可执行代码库中实现的。使用静态连接器将应用程序与库链接后,该应用程序使用的代码将复制到生成的可执行文件中。A 静态链接
收集编译源代码,称为目标代码和库代码成一个可执行文件在运行时加载到存储器中的全部。成为应用程序可执行文件一部分的库称为静态库。静态库
是目标文件的集合或归档。
Note:静态库也称为静态档案库和静态链接的共享库。
启动应用程序是,该应用程序的代码(包括与之链接的静态库的代码)被加载到应用程序的地址空间中。将许多静态库链接到应用程序中会生成大型应用程序可执行文件。图1显示静态库中实现的功能的应用程序的内存使用情况。具有大型可执行文件的应用程序会遇到启动速度慢和内存占用大的问题。此外,更新静态库后,其客户端应用程序也不会从对其进行的改进中收益。要访问改进的功能,应用程序的开发人员必须将应用程序的目标文件与库的新版本链接。应用程序用户将不得不用最新版本替换其应用程序副本。因此,要使用程序始终具有静态库提供的最新功能,就需要开发人员和最终用户进行破坏性的工作。
图1 使用静态库的应用
更好的方法是让应用在启动时或运行时在实际需要时将代码加载到其地址空间中。提供这种灵活性的库的类型称为动态库
。动态库不是静态链接到客户端应用程序中的。它们不会成为可执行文件的一部分。相反,可以在启动应用程序或运行时将动态库加载(并链接到应用程序)。
Note: 动态库也称为动态共享库,共享对象或动态链接库。
图2显示了如何将某些功能实现为动态库而不是静态库,以减少启动后应用程序使用的内存。
图2 使用动态库的应用程序
使用动态库,程序可以从对其自动使用的库的改进中受益,因为他们与库的链接是动态的,而不是静态的。也就是说,可以在不要求应用程序开发人员重新编译应用程序的情况下改进和扩展客户端应用程序的功能。为OS X 编写的应用程序受益于此功能,因为OS X 中的所有系统库都是动态库。这就是使用Carbon或Cocoa技术的应用程序如何从OS X的改进中受益的方法。
动态库提供的另一个好吃是,它们可以在加载时初始化,并且在客户端应用正常终止时可以执行清理任务。静态库没有此功能。有关详细信息,请参见模块初始化器和终结器
。
写在最后
Podfile 配置
1 | source 'https://github.com/CocoaPods/Specs.git' |
查看SDK和IPA二进制文件包含指令集
1 |
|
查看SDK和IPA二进制文件包含的动态库
1 | cd 到SDK 或 IPA Mach-O二进制文件目录 |