回答
动态框架和静态框架都是一个包含二进制和其他一些东西的包。该二进制文件称为动态库或静态库。
二进制是你编译后的代码,你的函数,类,方法变成二进制形式,它们被称为符号。
构建项目时。
您的代码将内置到二进制文件中,我们将其称为MyProjectBinary
。 如果你的项目链接到一个静态库,然后建立MyProjectBinary,链接器检查MyProjectBinary
中的符号,如果它使用静态库的一部分,例如,在静态库中使用一个类),那么链接器将复制所有与班级相关的符号,并将它们合并到MyProjectBinary
。所以无论您使用多少个静态库,您只能得到一个建筑结果,即MyProjectBinary
。
如果你链接到动态库,那么你告诉链接器,当MyProjectBinary
正在运行时,会在适当的位置有该动态库。动态库不是魔术,事实上,你已经使用了很长时间。 Apple提供的所有框架都是动态库。当您的应用程序在设备/模拟器上运行时,它们将保证存在。
我们假设您的项目链接到名为MyDynamicLibrary
的动态库。在构建项目时,首先MyProjectBinary
仍然与使用静态库一样生成。然后,链接器只需添加一些信息到MyProjectBinary
,在运行时标记在哪里找到“MyDynamicLibrary”。从MyDynamicLibrary
什么都不会被添加到MyProjectBinary
当运行项目:
对于使用静态库项目,什么都不会发生,因为所有所需的代码里面MyProjectBinary
,它只是运行。
对于使用动态库项目,当你的代码调用的函数,而在MyDynamicLibrary
,系统将尝试根据存储在MyProjectBinary
的信息找到MyDynamicLibrary
,如果它发现MyDynamicLibrary
,然后为MyProjectBinary
,该函数用于像在MyProjectBinary
。如果找不到MyDynamicLibrary
,则会发生错误,并且您的应用将被终止。
那么,为什么我们需要动态库的iOS 8?
在iOS8之前,应用程序只能有一个可执行二进制文件,因此使用静态库是可以的。
但是,当iOS 8出现时,您可以在一个应用程序中提供多个可执行二进制文件,其他二进制文件是扩展的可执行二进制文件。这带来了一个问题,如果有一些代码被多个可执行二进制文件使用,并且使用静态库,那么相同的符号将被复制到每个可执行文件中,因此需要更多的空间。这是动态库派上用场的时候,我们可以将这些代码放入动态库中,并且只为应用程序提供动态库的一个副本,应用程序及其扩展可以使用相同的动态库。
- 1. UIImageView的框架不是动态
- 2. Ember.js框架的状态是什么?
- 3. Apple的iOS框架是动态还是静态链接?
- 4. 设定框架动态
- 5. 动态登录Spring框架
- 6. 动态框架URl在c#
- 7. 框架和动态库
- 8. 动态GUI框架设计
- 9. 实体框架 - 动态sql
- 10. 动态改变UIview框架
- 11. Tkinter(动态)框架不显示
- 12. 是系统框架(如UIKIt.framework,CoreGraphics.framework)静态库或动态库
- 13. 什么是.NET框架
- 14. 什么是“优秀”框架?
- 15. 什么是M2M Mihini框架?
- 16. 什么是PastryKit框架?
- 17. 什么是onDrawFrame框架?
- 18. 什么是全栈框架?
- 19. 什么是python web框架
- 20. 框架是什么意思?
- 21. 什么是执行框架?
- 22. 什么是实体框架
- 23. 什么是MVVM框架?
- 24. 什么是HTML5框架?
- 25. 这是什么web框架?
- 26. 什么是软件框架?
- 27. 什么是新框架?
- 28. Android动态壁纸与框架动画
- 29. AnyLogic - 移动展示框架动态
- 30. 如何使CKEditors模态对话框模态的窗口,而不是框架