在iOS中,.dylib和.a库有什么区别?

21

我知道在Objective C中,编译和运行时的含义,(方法交换属于运行时)但我想知道这两个库之间的区别是什么? .a和.dylib两者的作用是什么,除了一个是静态的,一个是动态的?我们什么情况下需要使用其中之一?

2个回答

44

静态库(.a)

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

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

这里输入图片描述


很好的解释!+1!! - Jayprakash Dubey
2
图表可能来自这里:https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/OverviewOfDynamicLibraries.html - fullofsquirrels

8

.a代表静态库

.dylib代表动态库

静态库(.a)

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

您可能希望出于不同的原因创建静态库。

例如:

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

  • 您希望能够将一些公共代码集中在一起,以便您可以轻松添加错误修复或更新。

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

动态库

扩展名为.dylib的文件是动态库:它是在运行时而不是在编译时加载的库。如果您熟悉Windows的DLL或DSO,则基本上是同一类型的东西,有一些变化。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接