? ? ? ? bundle是一個目錄,其中包含了程序會使用到的資源笤虫,這些資源包含了如圖像、編譯好的代碼祖凫、nib文件等琼蚯。對應(yīng)bundle,cocoa提供了類NSBundle蝙场。這個類的對象凌停,就是定位了程序使用的資源在文件系統(tǒng)里的位置,并可以動態(tài)的加載售滤、或者卸載掉可執(zhí)行代碼。
? ? ? ? 我們的程序是一個bundle台诗,在Finder中完箩,一個應(yīng)用程序看上去和其他文件沒有什么區(qū)別,但是實際上它是一個包含了nib文件拉队,編譯代碼弊知,以及其他資源的目錄。我們把這個目錄叫做程序的main bundle粱快,在 xcode 里秩彤,使用應(yīng)用程序叔扼、框架、或者插件的時候漫雷,xcode 會生成對應(yīng)的資源的目錄包瓜富。 ?
NSBundle *mainBundle = [NSBundle mainBundle];
? ? ? ? [NSBundle mainBundle]是獲得NSBundle的一個單例對象,此單例對象已經(jīng)設(shè)置了默認(rèn)的resourcePath降盹,也就是你的app打包后的路徑与柑。
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
? ? ? ? 查找自定義的bundle。
// 1. 在main bundle中找到特定bundle路徑
? ? NSString*customerBundlePath = [[NSBundle mainBundle] pathForResource:@"Customer" ofType:@"bundle"];
? ? // 2. 載入bundle
? ? NSBundle*customerBundle = [NSBundle bundleWithPath:customerBundlePath];
? ? ? ? 通過bundle加載xib文件蓄坏。
UIView *customerView = [[NSBundle mainBundle] loadNibNamed:@"customerView" owner:self options:nil];
小知識:imageWithContentsOfFile
? ? ? ? 官方文檔說?imageWithContentsOfFile是可以自動區(qū)分@2x?@3x的圖片的价捧,于是就在工程里拖入pic@2x和pic@3x兩張圖片,然后使用如下代碼:
NSString *path = [[NSBundle mainBundle] pathForResource:@"pic" ofType:@"png"];
imageView.image = [UIImage imageWithContentsOfFile:path];
但是并沒有獲取到圖片涡戳,返回的path打印的結(jié)果為空结蟋。是不是獲取的path有問題,然后:
NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"pic.png"];
imageView.image = [UIImage imageWithContentsOfFile:path];
果然獲取到了圖片渔彰。
? ? ? ? 應(yīng)該是第一種獲取到的是具體的某一個文件嵌屎,如pic就是pic,所以用pic來獲取圖片的地址胳岂,根本就不存在pic這個圖片编整。而第二種獲取到的是類似文件的相對路徑,具體這里面的@2x乳丰、@3x就是imageWithContentsOfFile自動來匹配了掌测。