初學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"便可。
關於如何讓本身的應用國際化的具體方法,將在以後的文章進行描述。