Bundle和FrameWork有什么不同?
Also see www.opendarwin.org ->; unofficial FAQ ->; General ->; Q&A Nos. 3 & 4.
framework机制给OS X程序开发人员重复使用代码提供了很大的方便。我们可以构造自己的framework,并把它内嵌到需要使用它的bundle中。这一方面可以方便地重复使用代码,另一方面又可以避免需要用户事先安装相应的framework的麻烦。
束(bundle)是在文件系统中存放可执行代码及与该代码有关软件资源的一种目录。(束有可能只包含可执行代码或只包含软件资源,但此类情况并不常见)。本质上,束目录将一组资源“捆绑”在一个离散包中。资源包括诸如图像、声音以及某些软件使用的本地化字符串。由于在文件系统中代码和相关资源位于同一位置,这样使得进行安装、卸载以及其它形式的软件管理变得更为方便。
束(bundle)的类型分为三种,分别是应用程序(application)、框架(framework)以及可加载束(loadable bundle),可加载束中也包括了插件(plug-in)。这些束类型的内在结构是(或可以是)十分相似的。应用程序、框架以及可加载束的主要区别在于它们所包含的可执行代码的特性和用途不同。每一个类型都有它自己所需的扩展名:.app,.framework或.bundle(或者是应用程序为可加载束定义的任何扩展名)。
在程序中,束(bundle)等同于一些特定的编程实体,如一个类的实例或一个(在过程语言中)隐含类型的对象。这些实体的一些例程可使需要束资源的程序代码能够访问到这些资源,而其它的一些例程则使您能将可执行代码加载以及链接入一个运行中的应用程序。无论什么时候需要可加载束中的代码,应用程序都可以将它们载入。框架可自动地(并动态地)加载和链接共享库代码。
束(bundle)可包含多个资源组,每一组按语言、地区以及平台对资源进行分组整合。通过将这些资源组和可执行代码集合成一个单一的包,您就能创建一个可在任何被支持的平台上正常运行的应用程序、框架或插件的版本。通过使用此模型,您能根据用户的语言预置参数自动地本地化应用程序的人机界面。
一般地,Finder将束目录以文件形式显示给用户,以避免束的内容被随意地篡改。但是一些束的目录结构并不是隐含的,例如框架(framework)。Finder以文件还是以文件夹形式显示束取决于若干因素,其中包括在束目录中的束位(一种Finder属性)是否被设置。另外,Finder也隐藏了所有应用程序束的扩展名。
注意: 在Mac OS X的当前版本中,框架是“版本化”的束,因为它们不同的内在结构反映了它们为版本化动态共享库进行的配置。该结构缺乏新类型束的许多特征。
框架(framework)是一种类型的束(bundle),用于打包共享资源,例如:动态共享库、资源文件、头文件和参考文献等。这些资源的组合同时也给框架带来许多好处。举例来说,它使得动态共享库对资源的定位更加容易,也使得用户的安装和卸载操作更加方便。
框架束具有.framework的扩展名。在束的内部,可能存有框架的多个主要版本。位于框架文件夹顶层的符号链接指向库代码和资源的最新版本。动态链接编辑器把框架安装的目录地址写入可执行框架中。在运行一个程序时,如果动态链接编辑器在这个地址无法找到一个框架,它就会到标准目录地址里寻找。系统和第三方框架常常被安装在标准目录地址里。第三方框架可能也被包含在需要使用这些框架的应用程序包里。
框架中的可执行代码是一个动态共享库。多重、并发运行中的程序可以在这个库中共享代码,而无需它们自身的代码拷贝。不同于静态链接的共享库,一个程序中的未定义符号与其所链接的动态共享库,被延迟到该程序执行时才被绑定。当程序引用这些未定义符号时,动态链接编辑器试图在运行时解决这些未定义符号。如果一个库模块中的符号没有被程序所引用,那么该模块就不会被链接。动态共享库的安装路径被写入到所有用那些库文件来创建的可执行程序中。
框架可以具有主要版本(或称为不兼容版本)和次要版本(或称为兼容版本)。主要版本方案提供了向后兼容性。如果框架不能兼容于同老版本库文件相链接的程序,这时它就需要被赋予一个新的主要版本。而上面所说的这些程序必须与保留在框架束内部的一个早期版本相链接。次要版本方案提供了向前兼容性。一个框架的主要版本可以合并许多个次要版本。一个次要版本所体现的是与最新构建的框架相链接的程序的框架兼容性。
注意:在Mac OS X的最新版本中,框架都是“版本化”的束,它的内部目录结构缺少了许多出现在应用程序、可加载束和更新类型的束中的特性。而对于“新格式”类型束的描述
束可以包含可执行代码,和以下各种资源:
·图像 ·声音 ·本地化字符串 ·资源管理器-格式资源文件 ·库和框架 ·插件和其它可加载束 ·归档的用户界面定义
Mac OS X支持两种不同的束目录布局结构,即“新格式”和“版本化”的目录布局结构。版本化束的目录布局继承自Mac OS X之前的操作系统。以下例子描述了此目录布局结构:
MyBundle.bundle/ MyBundle(可执行代码) Resources / Pretty.tiff(非本地化资源)English.lproj/(本地化资源) Stop.eps MyBundle.nib MyBundle.stFrench.lproj/(本地化资源) stop.eps MyBundle.nib MyBundle.strings
尽管Mac OS X的最新开发工具只创建新格式束(框架除外),但系统束例程仍能读取并操作两种格式的束。
没有人知道吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
Also see www.opendarwin.org ->; unofficial FAQ ->; General ->; Q&A Nos. 3 & 4.
framework机制给OS X程序开发人员重复使用代码提供了很大的方便。我们可以构造自己的framework,并把它内嵌到需要使用它的bundle中。
这一方面可以方便地重复使用代码,另一方面又可以避免需要用户事先安装相应的framework的麻烦。
束(bundle)是在文件系统中存放可执行代码及与该代码有关软件资源的一种目录。(束有可能只包含可执行代码或只包含软件资源,但此类情况并不常见)。本质上,束目录将一组资源“捆绑”在一个离散包中。资源包括诸如图像、声音以及某些软件使用的本地化字符串。由于在文件系统中代码和相关资源位于同一位置,这样使得进行安装、卸载以及其它形式的软件管理变得更为方便。
束(bundle)的类型分为三种,分别是应用程序(application)、框架(framework)以及可加载束(loadable bundle),可加载束中也包括了插件(plug-in)。这些束类型的内在结构是(或可以是)十分相似的。应用程序、框架以及可加载束的主要区别在于它们所包含的可执行代码的特性和用途不同。每一个类型都有它自己所需的扩展名:.app,.framework或.bundle(或者是应用程序为可加载束定义的任何扩展名)。
在程序中,束(bundle)等同于一些特定的编程实体,如一个类的实例或一个(在过程语言中)隐含类型的对象。这些实体的一些例程可使需要束资源的程序代码能够访问到这些资源,而其它的一些例程则使您能将可执行代码加载以及链接入一个运行中的应用程序。无论什么时候需要可加载束中的代码,应用程序都可以将它们载入。框架可自动地(并动态地)加载和链接共享库代码。
束(bundle)可包含多个资源组,每一组按语言、地区以及平台对资源进行分组整合。通过将这些资源组和可执行代码集合成一个单一的包,您就能创建一个可在任何被支持的平台上正常运行的应用程序、框架或插件的版本。通过使用此模型,您能根据用户的语言预置参数自动地本地化应用程序的人机界面。
一般地,Finder将束目录以文件形式显示给用户,以避免束的内容被随意地篡改。但是一些束的目录结构并不是隐含的,例如框架(framework)。Finder以文件还是以文件夹形式显示束取决于若干因素,其中包括在束目录中的束位(一种Finder属性)是否被设置。另外,Finder也隐藏了所有应用程序束的扩展名。
注意: 在Mac OS X的当前版本中,框架是“版本化”的束,因为它们不同的内在结构反映了它们为版本化动态共享库进行的配置。该结构缺乏新类型束的许多特征。
框架(framework)是一种类型的束(bundle),用于打包共享资源,例如:动态共享库、资源文件、头文件和参考文献等。这些资源的组合同时也给框架带来许多好处。举例来说,它使得动态共享库对资源的定位更加容易,也使得用户的安装和卸载操作更加方便。
框架束具有.framework的扩展名。在束的内部,可能存有框架的多个主要版本。位于框架文件夹顶层的符号链接指向库代码和资源的最新版本。动态链接编辑器把框架安装的目录地址写入可执行框架中。在运行一个程序时,如果动态链接编辑器在这个地址无法找到一个框架,它就会到标准目录地址里寻找。系统和第三方框架常常被安装在标准目录地址里。第三方框架可能也被包含在需要使用这些框架的应用程序包里。
框架中的可执行代码是一个动态共享库。多重、并发运行中的程序可以在这个库中共享代码,而无需它们自身的代码拷贝。不同于静态链接的共享库,一个程序中的未定义符号与其所链接的动态共享库,被延迟到该程序执行时才被绑定。当程序引用这些未定义符号时,动态链接编辑器试图在运行时解决这些未定义符号。如果一个库模块中的符号没有被程序所引用,那么该模块就不会被链接。动态共享库的安装路径被写入到所有用那些库文件来创建的可执行程序中。
框架可以具有主要版本(或称为不兼容版本)和次要版本(或称为兼容版本)。主要版本方案提供了向后兼容性。如果框架不能兼容于同老版本库文件相链接的程序,这时它就需要被赋予一个新的主要版本。而上面所说的这些程序必须与保留在框架束内部的一个早期版本相链接。次要版本方案提供了向前兼容性。一个框架的主要版本可以合并许多个次要版本。一个次要版本所体现的是与最新构建的框架相链接的程序的框架兼容性。
注意:在Mac OS X的最新版本中,框架都是“版本化”的束,它的内部目录结构缺少了许多出现在应用程序、可加载束和更新类型的束中的特性。而对于“新格式”类型束的描述
束可以包含可执行代码,和以下各种资源:
·图像
·声音
·本地化字符串
·资源管理器-格式资源文件
·库和框架
·插件和其它可加载束
·归档的用户界面定义
Mac OS X支持两种不同的束目录布局结构,即“新格式”和“版本化”的目录布局结构。版本化束的目录布局继承自Mac OS X之前的操作系统。以下例子描述了此目录布局结构:
MyBundle.bundle/
MyBundle(可执行代码)
Resources /
Pretty.tiff(非本地化资源)
English.lproj/(本地化资源)
Stop.eps
MyBundle.nib
MyBundle.st
French.lproj/(本地化资源)
stop.eps
MyBundle.nib
MyBundle.strings
尽管Mac OS X的最新开发工具只创建新格式束(框架除外),但系统束例程仍能读取并操作两种格式的束。
没有人知道吗?