ios 中的 .dylib 和 .a lib 有什么区别?

What is the difference between .dylib and .a lib in ios?

我知道 Objective c 中的编译和运行时是什么(method swizzling 是运行时),但我想知道这两个库之间的界限是什么?一个 .a 和 .dylib ?除了说明一个是静态的而另一个是动态的之外,它们的作用是什么?我们什么时候需要一个而不是另一个?

.a stands for Static library

.dylib stands for dynamic library

一个静态库(.a)

静态库 (.a) 是一组已编译的 类 函数,可与 iOS 应用程序开发项目一起使用。它是编译后的二进制文件或 fat 文件,可以在项目之间共享。

您可能出于不同原因想要创建静态库。

例如:

  • 您想捆绑一些您 and/or 团队中的同事经常使用的 类 并轻松分享。

  • 您希望能够集中管理一些常用代码,以便轻松添加错误修复或更新。

  • 您想与多人共享一个库,但不允许他们看到您的代码。 -

动态库

以扩展名 .dylib 结尾的文件是一个动态库:它是一个在运行时而非编译时加载的库。如果您熟悉来自 Windows 或 DSO 的 DLL,那么它或多或少是同一类型的东西,只是有一些不同。

dylib 类似于 windows *.dll 文件。它们包含旨在被许多应用程序重复使用的通用、不可修改的代码。

静态库(.a)

静态库允许应用程序在编译时将代码加载到其地址 space time.This,这会导致磁盘空间变大和启动时间变慢。因为库的代码直接添加到链接目标的二进制文件中,这意味着要更新库中的任何代码,链接目标也必须重建。 动态库(.dylib)

动态库允许应用程序在 运行 实际需要时将代码加载到其地址 space。由于代码未静态链接到可执行二进制文件,因此在 运行 时间加载有一些好处。主要是,库可以使用新功能或错误修复进行更新,而无需重新编译和重新链接可执行文件。此外,在 运行 时间加载意味着各个代码库可以拥有自己的初始化程序并在从内存中卸载之前在自己的任务之后进行清理