iOS NSBundle的具體介紹

2021-09-22 09:16:28 字數 3579 閱讀 1212

bundle是乙個目錄,其中包含了程式會使用到的資源. 這些資源包含了如影象,聲音,編譯好的**,nib檔案(使用者也會把bundle稱為plug-in). 對應bundle,cocoa提供了類nsbundle.

我們的程式是乙個bundle. 在finder中,乙個應用程式看上去和其他檔案沒有什麼區別. 但是實際上它是乙個包含了nib檔案,編譯**,以及其他資源的目錄. 我們把這個目錄叫做程式的main bundle

bundle中的有些資源可以本地化.例如,對於foo.nib,我們可以有兩個版本: 乙個針對英語使用者,乙個針對法語使用者. 在bundle中就會有兩個子目錄:english.lproj和french.lproj,我們把各自版本的foo.nib檔案放到其中. 當程式需要載入foo.nib檔案時,bundle會自動根據所設定的語言來載入. 我們會在16章再詳細討論本地化

通過使用下面的方法得到程式的main bundle

nsbundle *mybundle = [nsbundle mainbundle];

一旦我們有了nsbundle 物件,那麼就可以訪問其中的資源了

// extension is optional

nsstring *path = [goodbundle pathforimageresource:@"mom"];

nsimage *momphoto = [[nsimage alloc] initwithcontentsoffile:path];

bundle中可以包含乙個庫. 如果我們從庫得到乙個class, bundle會連線庫,並查詢該類:

class newclass = [goodbundle classnamed:@"rover"];

id newinstance = [[newclass alloc] init];

如果不知到class名,也可以通過查詢主要類來取得

class aclass = [goodbundle principalclass];

id aninstance = [[aclass alloc] init];

可以看到, nsbundle有很多的用途.在這當中, nsbundle負責(在後台)載入nib檔案. 我們也可以不通過nswindowcontroller來載入nib檔案, 直接使用nsbundle:

bool successful = [nsbundle loadnibnamed:@"about" owner:someobject];

注意噢, 我們指定了乙個物件someobject作為nib的file's owner

使用initwithcontentsoffile時,檔案路徑的寫法 使用initwithcontentsoffile方法可以通過讀取乙個檔案的內容來初始化物件。 但檔案的路徑應該怎麼確定呢? 可以使用nsbundle的物件來獲取。 例如當前程式所在目錄下有個檔案re.xml,我們要將該檔案的內容做為nsdata的資料來源來初始化乙個nsdata物件,可以用下面的方法來實現:

nsstring *filepath = [[nsbundle mainbundle] pathforresouse:@"

re" oftype:@"

xml」];

nsdata *data = [[nsdata alloc] initwithcontentsoffile:filepath];

讀取plist中的內容:

nsstring *datapath = [[nsbundle mainbundle] pathforresource:@

"data"

oftype:@

"plist"

]; self.data =[nsarray arraywithcontentsoffile:datapath];

刪除本地檔案

總結:

在此記錄一下:在以後的開發中不直接使用任何相對路徑,而是使用經過計算以後的絕對路徑。

一.獲取

1.   nsstring *path = [[nsbuddle mainbuddle] pathforresource:@"resourcename"   

oftype@"resourcetype」];

uiimage *image = [[uiimage imagewithcontentsoffile:path];

2.   uiimage *image = [uiimage imagenamed:@"imagename」];

載入:

//方法1  

uiimage *imag1 = [uiimage imagenamed:@"image.png"]; //這種方式載入會快取,下次用的時候不用再載入,但是缺點是應用程式占用記憶體。  

//方法2  

//很好的解決了記憶體快取的問題

uiimage *image2 = [uiimage imagewithcontentsoffile:[[nsbundle mainbundle] pathforresource:@"image.png" oftype:nil]];  

//方法3  

//很好的解決了記憶體的快取問題

nsdata *imagedata = [nsdata datawithcontentsoffile:[[nsbundle mainbundle] pathforresource:@"image.png" oftype:nil]];  

uiimage *image3 = [uiimage imagewithdata:imagedata];  

二.獲取plist檔案

nsarray *array =[[nsarray alloc]initwithcontentsoffile:[[nsbundlemainbundle]pathforresource:@"name"oftype:@"plist"]];

nsdictionary *dict=[arrayobjectatindex:index];//將plist檔案中的內容轉換成字典

程式猿神奇的手,每時每刻,這雙手都在改變著世界的互動方式!

全網輿情監測系統功能板塊具體詳介

現如今,網路平台資訊傳擴散速度快,所以輿情監測的重要性也越來越為突顯。但面對如此龐大的網路資訊量,要確保資訊資料收集的完整 準確和可用性,利用輿情監測軟體進行資訊監測是必要的。那麼,問題是到底輿情監測軟體哪個比較好呢?比較好的輿情監測軟體又有哪些呢?面對市場上多種多樣的輿情監測軟體,雖然有一定的差異...

北京快遞外賣等人員必須核酸檢測 具體情況介紹

據央視新聞訊息,6 月 23 日,在北京市新冠肺炎疫情防控工作新聞發布會上,北京新冠肺炎疫情防控工作領導小組檢疫檢測工作組副組長 北京市衛生健康委員會副主任張華通報了全市開展核酸檢測情況。北京快遞外賣等人員必須核酸檢測 北京市舉程式設計客棧行新型冠狀病毒肺炎疫情防控工作第 130 場新聞發布會,qe...

Geodatabase ToolSet的介紹與使用

geodatabasetoolset簡稱為gdbt,是 esri 官網提供的免費工具,在 catalog 中用來協助監測 了解 報告多使用者地理資料庫的工具。用 gdbt 可以協助監測地理資料庫每天的健康狀況,更詳盡的了解資料庫的效能,並進行資料庫效能調優。gdbt 工作與sql server or...