首页 > ios > IOS 序列化与反序列化NSKeyedArchiver和NSKeyedUnarchiver

IOS 序列化与反序列化NSKeyedArchiver和NSKeyedUnarchiver

  序列化,也就是把不能直接存储到硬盘上的对象,给二进制化,转成字节流,就可以存储了。
  有几个常用的类NSArray、NSString、NSDictionary等继承的有NSSecureCoding协议,(iOS6.1)上面这样的解释:Objects which are safe to be encoded and decoded across privilege boundaries should adopt NSSecureCoding instead of NSCoding. Secure coders (those that respond YES to requiresSecureCoding) will only encode objects that adopt the NSSecureCoding protocol.大意就是实现这个协议的,都是可以直接存到硬盘上面的。
  

其他的类

  NScoding 是一个协议,主要有下面两个方法

-(id)initWithCoder:(NSCoder *)coder;
//从coder中读取数据,保存到相应的变量中,即反序列化数据
-(void)encodeWithCoder:(NSCoder *)coder;
// 读取实例变量,并把这些数据写到coder中去。序列化数据

  NSCoder 是一个抽象类,抽象类不能被实例话,只能提供一些想让子类继承的方法。

NSKeyedUnarchiver   从二进制流读取对象。
NSKeyedArchiver       把对象写到二进制流中去。

  

demo1:非自定义类也没有实现NSSecureCoding协议的

  有时候,会把没有实现NSSecureCoding协议的官方类存在数组或者字典中保存起来,要是仅仅用简单的writeToFile是写不进去的,必须用到序列化。
存储的时候是:

[[NSKeyedArchiver archivedDataWithRootObject:dataArray] 
writeToFile:Path atomically:YES];

解码的时候,直接:

dataArray=[[NSKeyedUnarchiver unarchiveObjectWithFile:Path] retain];

  

demo2:在自定义类中

  在自己定义的类中需要在.h 文件中加入,在.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];
  1. 还没有评论
评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks