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

Kum*_*sav 8 xcode frameworks static-libraries ios

我知道Objective c中的编译和运行时是什么,(方法调配是一个运行时)但我想知道是什么画了这两个库之间的界限?一个.a和.dylib?他们的目的是什么,除了陈述一个是静态的而另一个是动态的?我们何时需要一个而不是另一个?

sar*_*aut 20

静态库(.a)

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

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

在此输入图像描述

  • 图表可能来自这里:https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/OverviewOfDynamicLibraries.html (2认同)

Wol*_*ine 5

.a代表静态库

.dylib代表动态库

静态库(.a)

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

您可能出于各种原因想要创建一个静态库。

例如:

  • 您希望捆绑您和/或您的团队中的同事经常使用的许多课程,并轻松地共享这些课程。

  • 您希望能够集中一些通用代码,以便可以轻松添加错误修正或更新。

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

动态库

.dylib扩展名结尾的文件是一个动态库:这是一个在运行时而不是在编译时加载的库。如果您熟悉Windows或DSO的DLL,则几乎是相同类型的东西,但有一些曲折。

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