摘自:開篇
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...