iOS 序列化和反序列化

2021-06-20 23:30:41 字數 1520 閱讀 7621

摘自:開篇

1到底這個序列化有啥作用?

物件導向的程式在執行的時候會建立乙個複雜的物件圖,經常要以二進位制的方法序列化這個物件圖,這個過程叫做archiving. 二進位製流可以通過網路或寫入檔案中(**於某教材的一段話)

本人的理解是當你於寫資料需要本地儲存時,即將你的資料寫到硬碟上的時候,你就必須對他進行序列化,轉換成二進位制檔案,從而便於在磁碟上的讀寫,同理在取出的時候必須將其在反序列化,這樣才能將資料讀出來,就好比加密和揭秘的過程。

2 為什麼我將資料寫到plist 中的時候,也是儲存到本地的磁碟上,但是我就沒有序列化啊?

大家有沒有發現,其實plist 的資料是型別是有限制的,就那麼幾種特定的資料型別,,nsstring  ,大家有沒有嘗試過將乙個自己定義的類放進去(寫進plist ),在讀出來?

結果是什麼大家可以先猜想。

其實在nsstring 的類的定義中已經新增了協議即他是實現了nscoding **的方法的。

@inte***ce nsstring : nsobject 深入

3 nscoder  和 nscoding 

nscoding 是乙個協議,主要有下面兩個方法

-(id)initwithcoder:(nscoder *)coder;//從coder中讀取資料,儲存到相應的變數中,即反序列化資料

-(void)encodewithcoder:(nscoder *)coder;// 讀取例項變數,並把這些資料寫到coder中去。序列化資料

nscoder 是乙個抽象類,抽象類不能被例項話,只能提供一些想讓子類繼承的方法。

nskeyedunarchiver   從二進位製流讀取物件。

nskeyedarchiver       把物件寫到二進位製流中去。

4乙個簡單的例子

一般是在自己定義的類中需要在.h 檔案中加入

在.m 檔案眾實現他的的兩個**方法,這個**方法將會被自動呼叫

- (void)encodewithcoder:(nscoder *)acoder

- (id)initwithcoder:(nscoder *)adecoder

return self;}

以上是對該類序列化和反序列化。

nsdata *archivecarpricedata = [nskeyedarchiver archiveddatawithrootobject:self.dataarray];

[[nsuserdefaults standarduserdefaults] setobject:archivecarpricedata forkey:@"dataarray"];

nsdata *myencodedobject = [[nsuserdefaults standarduserdefaults] objectforkey:@"dataarray"];

self.datalist = [nskeyedunarchiver unarchiveobjectwithdata: myencodedobject];

iOS 序列化和反序列化

開篇 1到底這個序列化有啥作用?物件導向的程式在執行的時候會建立乙個複雜的物件圖,經常要以二進位制的方法序列化這個物件圖,這個過程叫做archiving.二進位製流可以通過網路或寫入檔案中 於某教材的一段話 本人的理解是當你於寫資料需要本地儲存時,即將你的資料寫到硬碟上的時候,你就必須對他進行序列化...

iOS 序列化和反序列化

開篇 1到底這個序列化有啥作用?物件導向的程式在執行的時候會建立乙個複雜的物件圖,經常要以二進位制的方法序列化這個物件圖,這個過程叫做archiving.二進位製流可以通過網路或寫入檔案中 於某教材的一段話 本人的理解是當你於寫資料需要本地儲存時,即將你的資料寫到硬碟上的時候,你就必須對他進行序列化...

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...