iOS 序列化与反序列化
開篇
1到底這個(gè)序列化有啥作用?
面向?qū)ο蟮某绦蛟谶\(yùn)行的時(shí)候會(huì)創(chuàng)建一個(gè)復(fù)雜的對(duì)象圖,經(jīng)常要以二進(jìn)制的方法序列化這個(gè)對(duì)象圖,這個(gè)過程叫做Archiving.?二進(jìn)制流可以通過網(wǎng)絡(luò)或?qū)懭胛募?#xff08;來源于某教材的一段話)
本人的理解是當(dāng)你于寫數(shù)據(jù)需要本地存儲(chǔ)時(shí),即將你的數(shù)據(jù)寫到硬盤上的時(shí)候,你就必須對(duì)他進(jìn)行序列化,轉(zhuǎn)換成二進(jìn)制文件,從而便于在磁盤上的讀寫,同理在取出的時(shí)候必須將其在反序列化,這樣才能將數(shù)據(jù)讀出來,就好比加密和揭秘的過程。
2?為什么我將數(shù)據(jù)寫到plist?中的時(shí)候,也是存儲(chǔ)到本地的磁盤上,但是我就沒有序列化啊?
大家有沒有發(fā)現(xiàn),其實(shí)plist?的數(shù)據(jù)是類型是有限制的,就那么幾種特定的數(shù)據(jù)類型,,nsstring?,大家有沒有嘗試過將一個(gè)自己定義的類放進(jìn)去(寫進(jìn)plist?),在讀出來?
結(jié)果是什么大家可以先猜想。
其實(shí)在nsstring?的類的定義中已經(jīng)添加了協(xié)議?即他是實(shí)現(xiàn)了nscoding?代理的方法的。
@interface?NSString?:?NSObject?
深入
3?NScoder?和?NScoding?
NScoding?是一個(gè)協(xié)議,主要有下面兩個(gè)方法
-(id)initWithCoder:(NSCoder?*)coder;//從coder中讀取數(shù)據(jù),保存到相應(yīng)的變量中,即反序列化數(shù)據(jù)
-(void)encodeWithCoder:(NSCoder?*)coder;//?讀取實(shí)例變量,并把這些數(shù)據(jù)寫到coder中去。序列化數(shù)據(jù)
NSCoder?是一個(gè)抽象類,抽象類不能被實(shí)例話,只能提供一些想讓子類繼承的方法。
NSKeyedUnarchiver?從二進(jìn)制流讀取對(duì)象。
NSKeyedArchiver?把對(duì)象寫到二進(jìn)制流中去。
4一個(gè)簡(jiǎn)單的例子
一般是在自己定義的類中需要在.h?文件中加入
在.m?文件眾實(shí)現(xiàn)他的的兩個(gè)代理方法,這個(gè)代理方法將會(huì)被自動(dòng)調(diào)用
-?(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;
}
以上是對(duì)該類序列化和反序列化。
NSData?*archiveCarPriceData?=?[NSKeyedArchiver?archivedDataWithRootObject:self.DataArray];
?[[NSUserDefaults?standardUserDefaults]?setObject:archiveCarPriceData?forKey:@"DataArray"];
?
NSData?*myEncodedObject?=?[[NSUserDefaults?standardUserDefaults]?objectForKey:@"DataArray"];
?self.dataList?=?[NSKeyedUnarchiver?unarchiveObjectWithData:?myEncodedObject];
轉(zhuǎn)載于:https://www.cnblogs.com/AlvinCrash/p/5379457.html
總結(jié)
以上是生活随笔為你收集整理的iOS 序列化与反序列化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (软件工程复习核心重点)第六章实现和测试
- 下一篇: String,StringBuffer,