iOS bundle

918 阅读3分钟

link: developer.apple.com/library/arc…

bundle 是文件系统中的一个目录,它将可执行代码和相关资源(如图像和声音)放在一起。在iOS和OS X中,应用程序、框架、插件和其他类型的软件都是 bundles。bundle 是一个具有标准化层次结构的目录,它保存可执行代码和该代码所使用的资源。Foundation 和 Core Foundation 包括用于定位和加载 bundle 中的代码和资源的工具。

注意:应用程序是第三方开发者能够在 iOS 上创建的唯一一种 bundle 类型。

bundle 给用户和开发人员带来了一些好处。通过简单地将应用程序或其他软件从一个位置移动到另一个位置,它们可以很容易地安装或重新定位。bundle 也是国际化中的一个重要因素。您将本地化资源存储在 bundle 的特定命名子目录中;编程工具在与用户语言首选项相对应的位置查找本地化资源。

大多数类型的 Xcode 项目在构建可执行文件时都会创建一个 bundle。因此,您很少需要手工构造一个 bundle。尽管如此,理解它们的结构以及如何访问其中的代码和资源还是很重要的。

Structure and Content of Bundles

一个 bundle 可以包含可执行代码,images, sounds, nib files, private frameworks and libraries, plug-ins, loadable bundles,或者任何其他类型的代码或资源。它还包含了一个 runtime-configuration 文件,叫做 infomation property list (Info.plist)。这些 items 在 bundle 结构中都有其适当的位置。资源例如 images, sounds, nib files 都被放在 Resources 子目录中。它们可以是局部的,也可以是全局的。本地化文件(包括字符串文件,它是本地化字符串的集合)放在 Resources 的子目录中,这些资源的扩展名为 lproj,名称对应于一种语言,可能是一种语言环境。

Accessing Bundle Resources

每个应用程序都有一个 main bundle,main bundle 包含应用程序代码。当用户启动一个应用程序时,它会在 main bundle 中找到它立即需要的代码和资源,并将它们加载到内存中。此后,应用程序可以根据需要动态地(和惰性地)从 main bundle 或从属 bundle 加载代码和资源。

NSBundle 类和(对于过程代码)CFBundleRef 不透明类型的 Core Foundation 为应用程序提供了在 bundle 中定位资源的方法。在 Objective-C 中,你首先必须获得一个对应于物理 bundle 的 NSBundle 实例。要获得应用程序的 main bundle,请调用类方法 mainBundle。当给定文件名、扩展名和一个 bundle 子目录(可选)时,其他 NSBundle 方法返回到 bundle 资源的路径。有了资源的路径之后,可以使用适当的类将其加载到内存中。

Loadable Bundles

与应用程序 bundle 一样,可加载 bundles 打包了可执行代码和相关资源,但是你要在运行时显式地加载这些 bundle。您可以使用可加载 bundle 来设计高度模块化、可定制和可扩展的应用程序。每个可加载 bundle 都有一个 principal class,它是 bundle 的入口点;当你加载 bundle 时,你必须向 NSBundle 询问 principal class 并使用返回的类对象来创建类的实例。

生词

explicitly [ɪkˈsplɪsɪtli] adv. 明确地;明白地

correspond [ˌkɔːrəˈspɑːnd] vi. 符合,一致;相应;通信

procedural [prəˈsiːdʒərəl] adj. 程序上的

subordinate [sə'bɔ:dineit] adj. 从属的,隶属的;次要的

thereafter [ˌðerˈæftər] adv. 其后;从那时以后

immediately [ɪˈmiːdiətli] adv. 立即,立刻;直接地

proper [ˈprɑːpər] adj. 适当的;本身的;特有的;正派的

facilities [fə'sɪlɪtɪz] n. 设施;工具,设备

rarely [ˈrerli] adv. 很少地;难得;罕有地

deposit [dɪˈpɑːzɪt] vt. 存放