Xcode 6支持动态框架。

什么是动态框架?

最佳答案

动态框架和静态框架都是包含二进制文件和其他内容的捆绑包。二进制文件称为动态库或静态库。

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

在构建项目时。

您的代码将内置到二进制文件中,我们称其为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出现时,您可以在一个应用程序中交付多个可执行二进制文件,其他二进制文件是扩展程序的可执行二进制文件。如果存在多个可执行二进制文件使用的某些代码,并且如果使用静态库,则会将相同的符号复制到每个可执行文件中,从而占用更多空间,这会带来一个问题。这是动态库派上用场的时候,我们可以将这些代码放入动态库中,并仅为应用程序提供动态库的一个副本,该应用程序及其扩展名可以使用同一动态库。

关于ios - 什么是动态框架,而不是非动态框架?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28382253/

10-15 15:31