Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时在iOS中使用动态链接库?在iOS中使用动态库有什么好处?_Ios_Xcode_Dynamic Linking_Dynamic Library - Fatal编程技术网

何时在iOS中使用动态链接库?在iOS中使用动态库有什么好处?

何时在iOS中使用动态链接库?在iOS中使用动态库有什么好处?,ios,xcode,dynamic-linking,dynamic-library,Ios,Xcode,Dynamic Linking,Dynamic Library,我对Windows或Linux和iOS中动态链接库的优势之间的差异感到奇怪 ⬇️ 下面的句子是为了证明我为什么觉得奇怪 我了解到库可以分为静态库和动态库 使用动态库的优点是允许其他应用程序使用相同的动态库(在窗口中,.dll文件),这样可以减少每个应用程序的内存使用,并且可以很容易地重新分发动态库,而不是重新分发应用程序。 实际上,在使用某些应用程序时,我可能会遇到“没有XXX.dll文件” 在Xcode中,当创建新项目时,我们可以在framework&library中选择framework和s

我对Windows或Linux和iOS中动态链接库的优势之间的差异感到奇怪

⬇️ 下面的句子是为了证明我为什么觉得奇怪

我了解到库可以分为静态库动态库

使用动态库的优点是允许其他应用程序使用相同的动态库(在窗口中,.dll文件),这样可以减少每个应用程序的内存使用,并且可以很容易地重新分发动态库,而不是重新分发应用程序。 实际上,在使用某些应用程序时,我可能会遇到“没有XXX.dll文件”

在Xcode中,当创建新项目时,我们可以在
framework&library
中选择frameworkstatic library。 创建项目后,我们可以选择如何成为“可执行、动态库、静态库”等Mach-O类型

因此,我认为如果我选择带有动态库的Mach-O类型,项目将以链接方式使用动态链接库进行编译

⬇️ 我真的很想知道

  • 但和Windows一样,iOS用户能否在iPhone中下载。所以文件,以便正常运行应用程序或更新动态库
  • iPhone上发布的其他应用程序是否可以使用相同的动态库
  • 因为我无法体验

  • 如果它(1,2)不能,为什么要使用动态库,即使我们无法获得在Windows或Linux中使用动态库的实际优势

  • 您对动态库和静态库的理解是正确的

    静态链接 编译后的源代码(目标代码,.o文件)和编译后的库代码组合成一个可执行文件[1]

    动态链接 编译后的源代码(目标代码)和库代码没有组合在一起。对动态链接库的引用在应用程序启动时或运行时解析(第二部分不适用于iOS应用程序)[1]

    Q1 iOS在应用程序的工作方式上大量借鉴了MacOS。两个操作系统中的可执行文件都是Mach-O文件。现在,在macOS上,动态链接库或DYLIB旨在更新,而无需更新整个应用程序。根据设计,这在iOS中也是可能的。阻止这一点的是苹果的指导方针,限制应用程序从互联网下载可执行代码。任何新的更新都必须经过他们的审查过程。[2]

    问题2 是的,一些动态链接的库在应用程序之间共享。但是,它们是由苹果通过iOS更新创建和更新的。所有的苹果框架,如UIKit、SceneKit等都是这样的例子。这就是为什么这些框架在Xcode中以“不嵌入”选项弱链接的原因

    第三季度 使用自己的dylib并非毫无意义。如果您在应用程序中提供扩展,那么dylibs是在不增加二进制大小的情况下在应用程序和扩展程序之间共享代码的绝佳选择。在这种情况下,可执行文件共享同一个库。[3]

    [1]

    [2]


    [3] 您对动态和静态库的理解是正确的

    静态链接 编译后的源代码(目标代码,.o文件)和编译后的库代码组合成一个可执行文件[1]

    动态链接 编译后的源代码(目标代码)和库代码没有组合在一起。对动态链接库的引用在应用程序启动时或运行时解析(第二部分不适用于iOS应用程序)[1]

    Q1 iOS在应用程序的工作方式上大量借鉴了MacOS。两个操作系统中的可执行文件都是Mach-O文件。现在,在macOS上,动态链接库或DYLIB旨在更新,而无需更新整个应用程序。根据设计,这在iOS中也是可能的。阻止这一点的是苹果的指导方针,限制应用程序从互联网下载可执行代码。任何新的更新都必须经过他们的审查过程。[2]

    问题2 是的,一些动态链接的库在应用程序之间共享。但是,它们是由苹果通过iOS更新创建和更新的。所有的苹果框架,如UIKit、SceneKit等都是这样的例子。这就是为什么这些框架在Xcode中以“不嵌入”选项弱链接的原因

    第三季度 使用自己的dylib并非毫无意义。如果您在应用程序中提供扩展,那么dylibs是在不增加二进制大小的情况下在应用程序和扩展程序之间共享代码的绝佳选择。在这种情况下,可执行文件共享同一个库。[3]

    [1]

    [2]

    [3]