NSBundle 的理解和 mainBundle 類方法詳解,nsbundlemainbundle
??吹筋愃频?/p>
NSString *file = [[NSBundle mainBundle] pathForResource:name ofType:nil];
這樣的代碼,來產(chǎn)生 file 的完全路徑。
那么它是什么東西呢:先看 NSBundle 類,直接繼承NSObject類。
這個(gè)類的對(duì)象,代表了 app 中代碼和資源的文件在文件系統(tǒng)里所在的位置,通俗的說,就是定位了程序使用的資源(代碼,圖形,音樂等數(shù)據(jù))在文件系統(tǒng)里的位置,并可以動(dòng)態(tài)的加載、or卸載掉可執(zhí)行代碼。
我們的程序是一個(gè)bundle. 在Finder中,一個(gè)應(yīng)用程序看上去和其他文件沒有什么區(qū)別. 但是實(shí)際上它是一個(gè)包含了nib文件,編譯代碼,以及其他資源的目錄. 我們把這個(gè)目錄叫做程序的main bundle,在 xcode 里,使用應(yīng)用程序、框架、or 插件的時(shí)候,xcode 會(huì)生成對(duì)應(yīng)的資源的目錄包。
類方法:
mainBundle 方法詳解
- (NSBundle *)mainBundle
返回一個(gè) NSBundle類的對(duì)象,這個(gè)對(duì)象就是一個(gè)完全path,這個(gè) path 保存的當(dāng)前可執(zhí)行的app路徑,或者是 返回nil。app ,Build之后, 資源文件直接就復(fù)制到了根目錄下,于是讀取的方法,應(yīng)該是這樣:
NSString *earth = [[NSBundle mainBundle] pathForResource:@"Brad Cox" ofType:@"png"];
編譯之后,mainBundle的資源都是放到RootFolder下,所以,可以直接訪問,不要指定內(nèi)部路徑。通常來說,這個(gè) mainbundle 就是 當(dāng)前的可執(zhí)行app 的在根目錄下的絕對(duì)路徑,
也就是:
finder根目錄開始的路徑+app 的name+.app 后綴。而資源就直接訪問,都在 app 的包里。比如;
/Users/dashuai/Library/Application Support/iPhone Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2/tomcat.app/drink.png