iOS開發里的Bundle是個啥玩意?!


初學iOS開發的同學,不管是自己寫的,還是粘貼的代碼,或多或少都寫過下面的代碼

  

[[NSBundle mainBundle] pathForResource:@"someFileName" ofType:@"yourFileExtension"]; 

[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"即可。

 

關於如何讓自己的應用國際化的具體方法,將在之后的文章進行描述。 

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM