bundle是就文件系統中一個資源包,其中包含可執行代碼和相關資源.在iOS 和 OX S 中, application,frameworks,plug-ins和其他類型軟件都是以bundle形式存在.
application是唯一第三方開發人員可以創建的bundle.
bundle使得蘋果系統中的應用和軟件很容易安裝和遷移,只需把bundle從一臺電腦復制到另一臺即可, bundle也是國際化的一個重要因素. 把本地化資源存在存儲在bundle中的特別命名的子目錄中,在設備查詢定位資源時會優先用戶相對應的語言選項.
bundle的結構和內容
一個bundle可以包含可執行代碼,圖片,聲音,nib文件,私有框架和libraries,插件,可加載的bundles或其他任何類型的代碼或資源.它還包含了一個運行時配置文件 info.plist
; 目錄存儲結構如下:
lproj擴展
文件對應不同語言和地區.Resources
文件存放資源.
bundle資源的訪問
每個應用程序都有一個main bundle
,這其中就包含了應用程序的代碼. 當應用啟動時,會先在main bundle
中尋找代碼和資源包,如果有,那么就立刻加載到內存中. 之后,應用程序可以動態的從main bundle或子 bundel 中加載需要的代碼和資源包.
你的應用程序通過Core Foundation的NSBundle和CFBundleRef opaque type的方法來定位bundle中的資源. 在Object-C中,你必須先獲得NSBundle類
對應的物理bundle對象. 即調用mainBundle
方法或其他根據特定文件名,目錄,或擴展文件返回bundle資源路徑的方法. 當你得到資源路徑后,即可使用合適的類加載到內存中.
loadable bundle
作為應用程序的bundle, 可執行代碼和相關資源都是默認加載的. 但是如果你想顯式的在運行時 加載這些bundle.你可以使用 loadable bundle 來設計高度模塊化的應用程序,方便定制和擴展.每一個 loadable bundle都有一個作為入口的主類, 當你要加載這個bundle時, 你必須由NSbundle 獲取到主類并據此創建一個對象.