將Model物件歸檔解檔

2021-07-03 06:13:48 字數 1913 閱讀 7739

物件編碼把物件的類特徵以及物件狀態轉化某種格式,這種格式可儲存,也可在程序間傳遞。

類的型別以及例項資料會被寫入到某種位元組流裡面,當程式結束的時候,該位元組流可進行持久化。程式啟動的時候,新分配物件可以解碼之前儲存的自身描述,然後把自己恢復到之前執行時的狀態。

編碼通常需和歸檔協作。歸檔將物件圖轉化成一種可以寫進檔案系統的格式(檔案),解檔則是在檔案上執行操作。在此過程中,儲存在檔案的物件對需要自身進行解碼。

物件編碼也被mac os x 系統的分布式物件api用於程序間傳輸物件。但是歸檔用得最為普遍,歸檔和屬性表相似,也是一種物件持久化機制。

方法,這些方法會在程式歸解檔某個物件圖的時候被呼叫。在encodewithcoder:方法中,我們會編碼物件的重要例項變數,而在initwithcoder:方法中,我們則會解碼這些值,並將它們重新賦給例項變數。initwithcoder:訊息不會觸發物件的初始化方法。

,nsarchiver,nsunarchiver。歸檔類宣告編碼物件例項變數的方法,解檔類則宣告解碼例項變數的方法。

nscoder方法可作用於物件、標量、c陣列、結構體、字串以及指向這些型別的指標。編碼自有類例項變數之前,請您務必要先呼叫超類的initwithcoder:或者encodewithcoder:實現。當您從位元組流解碼物件時,也務必要先保持或複製這些物件,然後再把解碼出來的值賦給其實例變數。

nscoder有兩個具體子類,二者各自使用不同的基本實現方式。「鍵」歸檔類(nskeyedarchivernskeyedunarchiver)將乙個編碼值和乙個字串鍵關聯在一起。解碼的時候 ,鍵值之間的關聯保持 一致。因此, 例項變數可按任意的次序編譯碼。如使用另一種型別的編解碼器(nskeyedunarchivernsunarchiver),您需要以某種次序編碼例項變數。解碼的時候,您仍要使用相同的次序。順序編解碼器只應在遺留**裡面才能使用,新的子類都應使用鍵歸檔編解碼器。

例子:1.協議

[plain]view plain

copy

@inte***ce untitled : nsobject   

2.實現協議

-(void) encodewithcoder: (nscoder *) acoder

-(id) initwithcoder: (nscoder *) adecoder

return (self);

}3.歸檔

[plain]view plain

copy

nsstring *path = [[nsbundle mainbundle] bundlepath];  

path = [[nsstring alloc] initwithformat:@"%@%@",path,@"/code.txt"];  

untitled *t;  

[nskeyedarchiver archiverootobject:coder tofile:path ];  

4.解檔

[plain]view plain

copy

nsstring *path = [[nsbundle mainbundle] bundlepath];  

path = [[nsstring alloc] initwithformat:@"%@%@",path,@"/code.txt"];  

untitled *t;  

t = [nskeyedunarchiver unarchiveobjectwithfile:path];  

iOS 歸檔解檔

開發過程中有時需要儲存一些輕量級的資料,對於ios提供的幾種資料儲存方式在這時最合適當屬物件歸檔 nscoding 但是將物件資料進行歸檔解檔時候需要實現兩個方法 encodewithcoder和initwithencoder。encodewithcoder 編碼 initwithcoder 解碼使...

iOS 歸檔 解檔

1.新建類datacache 歸檔 void cachewithdata id data withfile nsstring file 解檔 id archivewithfile nsstring file 2.使用 儲存路徑 college mouth.arc 在虛擬機器上,簡單的寫可以找到路徑,...

ios 歸檔解檔

如果你想讓儲存乙個自定義的物件,你就要讓這個自定義的物件去遵守這個協議,而且我們要在.m檔案中重寫 void encodewithcoder nscoder acoder 方法來告訴歸檔需要儲存哪些屬性,這個nscoder型別的物件和字典很相似。我們在自定義類的.m檔案中要實現這個方法。就比如我在p...