iOS学习笔记10 - Bundle和Info.plist

经常会有需要从应用中搜索并读取一个文件或图片。这时候就会用到如下的语句:

NSString *path = [[NSBundle mainBundle] pathForResource:@"AddressFields" ofType:@"plist"];

通过如上的语句获取到路径之后,就可以再通过各种方法解析或显示文件了

NSMutableDictionary *registerConfig = [NSMutableDictionarydictionaryWithContentsOfFile:path];

 

上面的方法中有一个对象是以前开发桌面程序没有看到过的:Bundle。那这次就来说下Bundle吧。

 

1. 定义

Bundle是一个文件夹,一个包含了可执行代码,图片,音乐的文件夹。根据wiki(http://en.wikipedia.org/wiki/Bundle_(NEXTSTEP)) ,应该是一个Apple专属的名词?作为对比,Windows经常将文件在编译时包含在一个可执行文件(exe)或DLL里了。

Bundle作为一个文件夹的有一个好处应该是文件结构很清晰?有人提问过怎么做一个iOS的asset bundle,答案超级简单:

创建一个文件夹,把文件添加进去,重命名为 bundle名字.bundle

颇有将一个大象装到冰箱里去的感觉。

 

2. 组成

Bundle下有一个运行时的配置文件:Info.plist。资源文件放在Resources文件夹下。

如果要实现多语言的话,应该只需要往Resources下更新一个对应语言的资源文件就可以了?

 

3. mainBundle

每个应用必然有一个mainBundle。这个Bundle中包含了应用的代码。

在程序加载的时候,首先会载入mainBundle里的马上需要执行的代码和资源,然后才会延迟或动态加载mainBundle或其他bundle中的其他代码和资源。

 

4. Info.plist

Info.plist是存放运行时读取的键值对的XML文件。

如果要读取Info.plist里的值,可以通过:

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

来直接获取,例如:

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

所有iOS下的Info.plist里的值,可以参考:http://developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html%23//apple_ref/doc/uid/TP40009252-SW1 

你可能感兴趣的:(Bundle)