bundle是就文件系统中一个资源包,其中包含可执行代码和相关资源.在iOS 和 OX S 中, application,frameworks,plug-ins和其他类型软件都是以bundle形式存在.
application是唯一第三方开发人员可以创建的bundle.
bundle使得苹果系统中的应用和软件很容易安装和迁移,只需把bundle从一台电脑复制到另一台即可, bundle也是国际化的一个重要因素. 把本地化资源存在存储在bundle中的特别命名的子目录中,在设备查询定位资源时会优先用户相对应的语言选项.
bundle的结构和内容
一个bundle可以包含可执行代码,图片,声音,nib文件,私有框架和libraries,插件,可加载的bundles或其他任何类型的代码或资源.它还包含了一个运行时配置文件 info.plist
; 目录存储结构如下:
lproj扩展
文件对应不同语言和地区.Resources
文件存放资源.
bundle资源的访问
每个应用程序都有一个main bundle
,这其中就包含了应用程序的代码. 当应用启动时,会先在main bundle
中寻找代码和资源包,如果有,那么就立刻加载到内存中. 之后,应用程序可以动态的从main bundle或子 bundel 中加载需要的代码和资源包.
你的应用程序通过Core Foundation的NSBundle和CFBundleRef opaque type的方法来定位bundle中的资源. 在Object-C中,你必须先获得NSBundle类
对应的物理bundle对象. 即调用mainBundle
方法或其他根据特定文件名,目录,或扩展文件返回bundle资源路径的方法. 当你得到资源路径后,即可使用合适的类加载到内存中.
loadable bundle
作为应用程序的bundle, 可执行代码和相关资源都是默认加载的. 但是如果你想显式的在运行时 加载这些bundle.你可以使用 loadable bundle 来设计高度模块化的应用程序,方便定制和扩展.每一个 loadable bundle都有一个作为入口的主类, 当你要加载这个bundle时, 你必须由NSbundle 获取到主类并据此创建一个对象.