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

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

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

动态库:

  1. 动态库在运行时被加载,而不是在编译时。它们能够被多个使用程序共享,然后节省体系存储空间。
  2. 动态库能够独立于使用程序进行更新,由于它们不是使用程序包的一部分。
  3. 动态库会使使用程序的发动时刻添加,由于它们需求在运行时加载并解析符号表。
  4. 当多个使用程序使用相同的动态库时,这有利于减小体系存储空间,但对于单个使用程序来说,它或许导致包体积添加。

静态库:

  1. 静态库在编译时被链接到使用程序中,成为使用程序二进制文件的一部分。
  2. 静态库不会被多个使用程序共享。每个使用程序都包括其所需的静态库的副本。
  3. 静态库不会添加使用程序的发动时刻,由于它们在编译时已经被链接。
  4. 静态库或许导致使用程序包体积较小,由于编译器能够优化并仅包括使用程序实际使用的代码。但是,当多个使用程序使用相同的静态库时,这或许会导致体系存储空间的浪费。

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

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