什么是动态框架而不是非动态框架?

时间:2015-02-07 12:43:14

标签: ios xcode6

Xcode 6允许使用动态框架。

什么是动态框架?

1 个答案:

答案 0 :(得分:3)

动态框架和静态框架都是包含二进制和其他一些东西的包。二进制文件称为动态库或静态库。

二进制文件是编译后编码的代码,函数,类,方法变为二进制形式,它们被称为符号。

构建项目时。

您的代码将构建为二进制文件,我们将其称为MyProjectBinary。 如果您的项目链接到静态库,那么在构建MyProjectBinary之后,链接器检查MyProjectBinary中的符号,如果它使用静态库的某些部分,例如,在静态库中使用一个类,那么链接器将复制与该课程相关的所有符号,并将它们合并到MyProjectBinary。因此,无论您使用多少个静态库,您只能获得一个构建结果,即MyProjectBinary

如果您链接到动态库,那么您告诉链接器,当MyProjectBinary运行时,将在适当的位置存在该动态库。动态库并不神奇,事实上,你已经使用了很长时间。 Apple提供的所有框架都是动态库。当您的应用程序在设备/模拟器上运行时,它们会保证存在。

假设您的项目链接到名为MyDynamicLibrary的动态库。构建项目时,第一个MyProjectBinary仍然与使用静态库相同。然后,链接器只需向MyProjectBinary添加一些信息,标记在哪里找到" MyDynamicLibrary"在运行时。 MyDynamicLibrary的任何内容都不会添加到MyProjectBinary

运行项目时:

对于使用静态库的项目,没有什么特别的事情发生,因为所需的所有代码都在MyProjectBinary内,它只是运行。

对于使用动态库的项目,当您的代码调用MyDynamicLibrary中的函数时,系统会根据MyDynamicLibrary中存储的信息尝试查找MyProjectBinary,如果找到的话MyDynamicLibrary,然后对于MyProjectBinary,该函数的使用方式与MyProjectBinary类似。如果找不到MyDynamicLibrary,则会发生错误,您的应用将被终止。

那么为什么我们需要iOS 8的动态库?

在iOS8之前,一个应用程序只能有一个可执行的二进制文件,因此使用静态库是可以的。

但是当iOS 8出现时,您可以在一个应用程序中提供多个可执行二进制文件,其他二进制文件是扩展程序'可执行二进制文件这会带来一个问题,如果有一些代码被多个可执行二进制文件使用,并且如果使用静态库,则相同的符号将被复制到每个可执行文件中,从而占用更多空间。这是动态库派上用场的时候,我们可以将这些代码放在动态库中,并且只为app提供动态库的一个副本,应用程序及其扩展可以使用相同的动态库。