XCode中的静态库和动态库有什么区别?为什么Apple不允许我们在iOS应用程序中使用动态库?
虽然您可以为Mac OS X构建动态库,但您无法将它们用于iPhone开发。
静态库只是一个目标文件的存档,它被拉入一个链接到它的程序中。链接器将取消归档所有归档文件,并在链接期间将其与其余目标文件一起拉入。
然而,动态库创建了一个共享对象文件,类似于程序但没有入口点,程序可以将这些文件链接起来并将它们自身调用到这些共享库中,而不是将它们拉入自身。
动态库对于iPhone应用程序没有任何意义,因为无法在手机上安装库。我记得在阅读一些文档,其中苹果表示他们决定不使用动态库,因为他们不希望用户必须处理查找/更新库的麻烦。每个应用程序安装1个捆绑包要容易得多。
Apple确实允许您制作动态库。在Mac OS X上,这些以.bundle或.dylib结尾(在Linux上不是.so或.a)。
具体是什么,你想做什么?你为你的dylib创建了一个目标吗?
Static libraries (*.a)
是目标文件的集合。反过来,目标文件只是一个来自编译器并包含机器代码的文件的名称。
Dynamic libraries (*.dylib)
与static
相反,而不是被复制到单个单片可执行文件中,在实际需要时被加载到内存中。这可能发生在加载时或运行时。
Dynamic libraries
通常在应用程序之间共享,因此系统只需要存储库的一个副本,并让不同的进程访问它。因此,从动态库调用代码和数据比从静态库调用代码和数据要慢。
所有iOS和macOS系统库都是dynamic
。因此,我们的应用程序将受益于Apple对标准库框架的未来改进,而无需创建和发布新版本。 Apple保留为自己创造system frameworks
的能力;目前,第三方开发者无法在iOS上创建system frameworks
。
如果您的Deployment target
是iOS8 +,您可以创建embedded framework
,embedded framework
和dynamic framework
。 Embedded frameworks
放置在应用程序的沙箱中,仅适用于该应用程序。首先为extensions创建此类型以共享公共代码和资源。