iOS中的资源种类包括:nib文件,字符串资源,图像(images),声音(Sounds),视屏(Movies),属性列表(plist).
iOS支持设备特有的资源,资源被命名为如下的格式:<basename><device><filename_extension>
这里,basename指资源的原始名字,也是我们在代码中引用的名字。
filename_extension是资源文件的扩展名。<device>是如下两者之一:~iphone,~ipad。
对于以上的内存,举例说明,代码如下:
UIImage * anImage = [UIImage imageNamed:@"MyImage.png"];
在iphone/ipod上,如果MyImage~iphone.png存在,则加载;否则去加载MyImage.png.
在ipad上,如果MyImage~ipad.png存在,则加载;否则去加载MyImage.png.
这个机制就方便了我们去写universal类型的应用程序,使得我们不必在代码中根据设备类型,加载不同名字的资源文件。
搜索资源时,按如下优先级顺序:
1、Global(nonlocalized) resources
2、Region-specific resources(based on the user's region preferences) 这个只在MAC OS X上有效
3、Language-specific resources(based on the user's language preferences)
4、Development language of the bundle(as specified by the CFBundleDevelopmentRegion in the bundle's Info.plist file)
由于全局资源的优先级高于特定语言的资源,一个资源的全局资源和本地化的版本不能同时存在,否则本地化的版本将永远没有机会加载。
Nib文件
和nib文件想连接的Action Method,不必在头文件中声明,可以在.m文件中声明为私有的,这是因为XCode解析的是.m文件。
字符串资源
字符串资源文件,一般是通过在代码中使用宏,然后再使用命令行工具genStrings来产生的。
这些宏是:
NSLocalizedString(key,comment)
NSLocalizedStringFromTable(key,tableName,comment)
NSLocalizedStringFromTableInBundle(key,tableName,bundle,value,comment)
NSLocalizedStringWithDefaultValue(key,tableName,bundle,value,comment)
其背后实质上都是调用的NSBundle的localizedStringForKey:value:table:这个方法。
使用这些宏时,会用到一些额外的参数,这些参数是被genstrings工具来使用的,其说明如下:
Key:该字符串用来查找相应的值,这个串中一定不能包含扩展的ASCII字符集中的字符。
TableName:key所在的字符串文件的名字。如果没有提供该参数,则默认为Localizable.strings。如果提供,则不要加末尾的".strings"。
Default value:与给定的key相关联的默认值,如没有指定,则genstrings使用key字符串作为初始值。默认值里面可以包含扩展的ACSII字符。
Comment:注释性的文字。有了这些信息,翻译人员就会明白气用途。getstrings把这些信息写入生成的文件中,格式为C风格的注释。
Bundle:一个NSBundle对象,或是CFBundleREf类型,用于指明包含字符串文件的bundle。可以据此来加载本app之外的资源。
Resource Programming Guide中的String Resources部分。
图像,声音和视频资源
要支持视网膜显示屏的话,将高清的图片名字后面加@2x,并将这些图片放在同一位置。
属性列表
对于app的配置文件Info.plist,如果想读取里面的值,可以用NSBundle类的如下函数:
objectForInfoDictionaryKey:
infoDictionary