【发布时间】:2011-06-04 19:39:06
【问题描述】:
好的,我基本上知道现实生活中的框架是什么。我见过一些包含一些头文件和二进制文件的框架。是这样吗? OS X 框架除了作为一个包含您链接到应用程序的标头和库的文件夹之外,是否还有其他特殊功能?
【问题讨论】:
标签: macos frameworks
好的,我基本上知道现实生活中的框架是什么。我见过一些包含一些头文件和二进制文件的框架。是这样吗? OS X 框架除了作为一个包含您链接到应用程序的标头和库的文件夹之外,是否还有其他特殊功能?
【问题讨论】:
标签: macos frameworks
正是,引用“Mac OS X 技术概述”:
框架 一种捆绑包,将动态共享库与库所需的资源(包括头文件和参考文档)打包在一起。
所以“.framework”基本上相当于“.app”,只是用于动态共享库而不是可执行文件。
【讨论】:
来自Apple Developer Connection: Framework Definition:
框架是一个包(结构化目录),其中包含动态共享库以及相关资源,例如 nib 文件、图像文件和头文件。当您开发应用程序时,您的项目会链接到一个或多个框架。例如,iPhone 应用程序项目默认链接到 Foundation、UIKit 和 Core Graphics 框架。您的代码通过框架通过其头文件发布的应用程序编程接口 (API) 访问框架的功能。由于库是动态共享的,因此多个应用程序可以同时访问框架代码和资源。系统根据需要将框架的代码和资源加载到内存中,并在所有应用程序之间共享资源的一个副本。
来自Framework Programming Guide: What are Frameworks?:
与静态链接库和其他类型的动态共享库相比,框架具有以下优势:
- 框架组相关但独立的资源在一起。这种分组使安装、卸载和定位这些资源变得更加容易。
- 框架可以包含比库更广泛的资源类型。例如,一个框架可以包含任何相关的头文件和文档。 一个框架的多个版本可以包含在同一个包中。这使得向后兼容旧程序成为可能。
- 无论有多少进程在使用这些资源,在任何给定时间,只有一个框架只读资源的副本物理驻留在内存中。这种资源共享减少了系统的内存占用并有助于提高性能。
你可能想看看SO question 1444543: Differences between Framework and non-Framework builds of Python on Mac OS X。
【讨论】:
在 Mac OS X 上,框架是一个版本化的捆绑库。正如您所注意到的,一些框架非常简单,并且仅包含单个版本的头文件和库本身。其他框架可以有多个版本、多个库文件、子框架(在这种情况下,父框架也称为伞形框架)和资源文件,例如图像或本地化字符串。
更多信息请访问Framework Programming Guide。
【讨论】: