IOS 序列化與還原序列化

來源:互聯網
上載者:User

IOS 序列化與還原序列化 

開篇

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

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

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

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

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

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

其實在nsstring 的類的定義中已經添加了協議<nscoding> 即他是實現了nscoding 代理的方法的。

@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>

深入

3 NScoder 和 NScoding 

NScoding 是一個協議,主要有下面兩個方法

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

-(void)encodeWithCoder:(NSCoder *)coder;// 讀取執行個體變數,並把這些資料寫到coder中去。序列化資料

NSCoder 是一個抽象類別,抽象類別不能被執行個體話,只能提供一些想讓子類繼承的方法。

NSKeyedUnarchiver 從二進位流讀取對象。

NSKeyedArchiver 把對象寫到二進位流中去。

4一個簡單的例子

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

在.m 檔案眾實現他的的兩個代理方法,這個代理方法將會被自動調用

- (void)encodeWithCoder:(NSCoder *)aCoder
{
 [aCoder encodeObject:self.InsureSolutionID forKey:@"personName"];
 [aCoder encodeObject:self.InsureSolutionName forKey:@"personAge"];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
 self = [super init];
 if (self)
 {
 self.InsureSolutionID = [aDecoder decodeObjectForKey:@"personName"];
 self.InsureSolutionName = [aDecoder decodeObjectForKey:@"personAge"];
 }
 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];

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.