Mac OS X 中的框架到底是啥? ( *.framework 文件夹)

Posted

技术标签:

【中文标题】Mac OS X 中的框架到底是啥? ( *.framework 文件夹)【英文标题】:What exactly is a Framework in Mac OS X? ( *.framework folders )Mac OS X 中的框架到底是什么? ( *.framework 文件夹) 【发布时间】:2011-06-04 19:39:06 【问题描述】:

好的,我基本上知道现实生活中的框架是什么。我见过一些包含一些头文件和二进制文件的框架。是这样吗? OS X 框架除了作为一个包含您链接到应用程序的标头和库的文件夹之外,是否还有其他特殊功能?

【问题讨论】:

【参考方案1】:

正是,引用“Mac OS X 技术概述”:

框架 一种捆绑包,将动态共享库与库所需的资源(包括头文件和参考文档)打包在一起。

所以“.framework”基本上相当于“.app”,只是用于动态共享库而不是可执行文件。

【讨论】:

【参考方案2】:

框架信息

来自Apple Developer Connection: Framework Definition:

框架是一个包(结构化目录),其中包含动态共享库以及相关资源,例如 nib 文件、图像文件和头文件。当您开发应用程序时,您的项目会链接到一个或多个框架。例如,iPhone 应用程序项目默认链接到 Foundation、UIKit 和 Core Graphics 框架。您的代码通过框架通过其头文件发布的应用程序编程接口 (API) 访问框架的功能。由于库是动态共享的,因此多个应用程序可以同时访问框架代码和资源。系统根据需要将框架的代码和资源加载到内存中,并在所有应用程序之间共享资源的一个副本。

来自Framework Programming Guide: What are Frameworks?:

与静态链接库和其他类型的动态共享库相比,框架具有以下优势:

框架组相关但独立的资源在一起。这种分组使安装、卸载和定位这些资源变得更加容易。 框架可以包含比库更广泛的资源类型。例如,一个框架可以包含任何相关的头文件和文档。 一个框架的多个版本可以包含在同一个包中。这使得向后兼容旧程序成为可能。 无论有多少进程在使用这些资源,在任何给定时间,只有一个框架只读资源的副本物理驻留在内存中。这种资源共享减少了系统的内存占用并有助于提高性能。

相关的 SO 问题

你可能想看看SO question 1444543: Differences between Framework and non-Framework builds of Python on Mac OS X。

【讨论】:

【参考方案3】:

在 Mac OS X 上,框架是一个版本化的捆绑库。正如您所注意到的,一些框架非常简单,并且仅包含单个版本的头文件和库本身。其他框架可以有多个版本、多个库文件、子框架(在这种情况下,父框架也称为伞形框架)和资源文件,例如图像或本地化字符串。

更多信息请访问Framework Programming Guide。

【讨论】:

以上是关于Mac OS X 中的框架到底是啥? ( *.framework 文件夹)的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS 是啥?

在 Mac OS X 虚拟环境中安装 Python,其中包含我可以包含到 Xcode 中的框架?

谁知道Mac OS X的终端上打开文件的命令是啥?急!!!

允许在 Mac OS X 应用程序中读取文件的权利是啥? (拒绝文件读取数据错误)

在 Mac OS X 上安装本地 LAMP 以进行 Web 开发的最简单方法是啥?

用核心数据(Mac OS X 可可)对 _ordered_ 项目列表建模的最佳方法是啥?