Xcode 6允许使用动态框架。
什么是动态框架?
答案 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提供动态库的一个副本,应用程序及其扩展可以使用相同的动态库。