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/