初学iOS开发的同窗,无论是本身写的,仍是粘贴的代码,或多或少都写过下面的代码
[[NSBundle mainBundle] pathForResource:@"someFileName" ofType:@"yourFileExtension"]; spa
[YourViewController initWithNibName:"YourViewController" bundle:nil]; 图片
但是你知道这里的bundle究竟是个啥玩意呢?!
Bundle简单地讲,就是一个内部结构按照标准规则组织的特殊目录
iOS的应用都是经过bundle进行封装的,对应的bundle类型是Application类型,平时咱们经过XCode编译出来的Target(即咱们开发的应用),其实就是一个Application类型bundle,即一个文件夹!可是Finder会把这个bundle当作一个文件显示给咱们,实际上是由于这个bundle自身也是一个package,而Mac系统会把全部的package当作一个文件来对待,显示给用户,从而防止用户误操做致使程序文件损坏或丢失。至于bundle和package有什么区别,就不在这里展开说明了,本文后面所说的bundle都会被Mac系统视为package。
如今咱们已经知道了,原来咱们开发的应用程序,最后都会成为一个bundle,那么就不难理解为何不少资源文件加载大可能是经过bundle来进行的了,从bundle进行文件加载实际就是经过应用本身所在的文件夹进行加载。
不过紧接着咱们又会产生好几个疑问:
1 为何不直接使用文件路径的方式来读取资源文件呢?
2 为何还会存在pathForResource:ofType:这个方法,难道说咱们在开发的时候还不能肯定这些文件在哪儿吗?
事实上,咱们是可使用文件系统的路径进行资源文件的访问的,不过当咱们要进行App的国际化的时候,咱们须要本身去实现不一样语言、地区状况下加载对应的文件,而在部分资源文件公用,部分须要国际化的时候,对开发人员来说,代码维护起来尤其混乱。
而bundle对iOS开发者来说,最大的方便就是能够很是简单地让本身的应用国际化,在不一样的语言不一样的地区,加载不一样的资源文件,显示不一样的语言文 字,而实现这些只须要咱们严格按照bundle的要求进行资源文件的存放便可,而不须要写大量代码判断地区语言。遵循的方法也很简单,只须要咱们建立对应 的"本地化文件夹"便可,例如咱们要同时让图片"pic.png"在中文和英文下显示不一样的内容,只须要建立两个本地化文件夹zh.lproj和 en.lproj,分别放入同名但内容不一样的"pic.png"便可。
关于如何让本身的应用国际化的具体方法,将在以后的文章进行描述。