🐻iOS动态库转静态库的探索

6,293 阅读2分钟

我在# 🐻记录启动速度优化30%的过程的文章中曾经提及到,动态库转静态库为什么会导致包体积变小。

以下是关于这方面的更详细解释:

实际上,动态库(Dynamic Libraries)和静态库(Static Libraries)在减少包体积方面有不同的优缺点。在某些情况下,将动态库转换为静态库可能会有所帮助,但在其他情况下,这种转换可能会增加包体积。让我们来详细了解一下它们之间的区别。

动态库:

  1. 动态库在运行时被加载,而不是在编译时。它们可以被多个应用程序共享,从而节省系统存储空间。
  2. 动态库可以独立于应用程序进行更新,因为它们不是应用程序包的一部分。
  3. 动态库会使应用程序的启动时间增加,因为它们需要在运行时加载并解析符号表。
  4. 当多个应用程序使用相同的动态库时,这有利于减小系统存储空间,但对于单个应用程序来说,它可能导致包体积增加。

静态库:

  1. 静态库在编译时被链接到应用程序中,成为应用程序二进制文件的一部分。
  2. 静态库不会被多个应用程序共享。每个应用程序都包含其所需的静态库的副本。
  3. 静态库不会增加应用程序的启动时间,因为它们在编译时已经被链接。
  4. 静态库可能导致应用程序包体积较小,因为编译器可以优化并仅包含应用程序实际使用的代码。然而,当多个应用程序使用相同的静态库时,这可能会导致系统存储空间的浪费。

总的来说,将动态库转换为静态库可能有助于减小单个应用程序的包体积,因为编译器可以优化静态库并仅包含实际使用的代码。然而,这可能会增加系统存储空间的消耗,因为每个应用程序都需要包含其所需的静态库的副本。这种转换可能在某些情况下有用,但不是一种普遍适用的解决方案。在进行此类转换之前,应根据具体需求和场景权衡其优缺点。

所以就iOS而言。因为私有动态库不具备共享性,所以动态库转静态库会导致包体积变小。