NScoder 和 NScoding 有將自己定義的類的對象寫入磁盤的作用
NScoding 是一個協(xié)議二打,主要有下面兩個方法
-(id)initWithCoder:(NSCoder *)coder;//從coder中讀取數(shù)據(jù)诊霹,保存到相應的變量中垄潮,即反序列化數(shù)據(jù)
-(void)encodeWithCoder:(NSCoder *)coder;// 讀取實例變量款侵,并把這些數(shù)據(jù)寫到coder中去跌帐。序列化數(shù)據(jù)
NSCoder 是一個抽象類明肮,抽象類不能被實例話窄陡,只能提供一些想讓子類繼承的方法棘钞。
NSKeyedUnarchiver 從二進制流讀取對象缠借。
NSKeyedArchiver 把對象寫到二進制流中去。
4一個簡單的例子
一般是在自己定義的類中需要在.h 文件中加入<NScoding>
在.m 文件眾實現(xiàn)他的的兩個代理方法宜猜,這個代理方法將會被自動調(diào)用
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.InsureSolutionID forKey:@"personName"];
[aCoder encodeObject:self.InsureSolutionName forKey:@"personAge"];
}
encodeWithCoder 可以調(diào)用的方法:
1)泼返、如果是類 就用encodeObject: forKey:
2)、如果是普通的數(shù)據(jù)類型就用 eg宝恶、encodeInt: forKey:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self)
{
self.InsureSolutionID = [aDecoder decodeObjectForKey:@"personName"];
self.InsureSolutionName = [aDecoder decodeObjectForKey:@"personAge"];
}
return self;
}
initWithCoder 可以調(diào)用的方法:
1)符隙、如果是類 就用decodeObjectForKey:
2)、如果是普通的數(shù)據(jù)類型就用 eg垫毙、decodeIntForKey:
以下是對該類序列化和反序列化霹疫。
NSData *archiveCarPriceData = [NSKeyedArchiver archivedDataWithRootObject:self.DataArray];
[[NSUserDefaults standardUserDefaults] setObject:archiveCarPriceData forKey:@"DataArray"];
NSData *myEncodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"DataArray"];
self.dataList = [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];