NScoder 和 NScoding

作者: 泥_叔 | 来源:发表于2015-10-10 14:14 被阅读5444次

NScoder 和 NScoding 有将自己定义的类的对象写入磁盘的作用
NScoding 是一个协议,主要有下面两个方法
-(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据
-(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据
NSCoder 是一个抽象类,抽象类不能被实例话,只能提供一些想让子类继承的方法。
NSKeyedUnarchiver 从二进制流读取对象。
NSKeyedArchiver 把对象写到二进制流中去。
4一个简单的例子
一般是在自己定义的类中需要在.h 文件中加入<NScoding>
在.m 文件众实现他的的两个代理方法,这个代理方法将会被自动调用

encodeWithCoder 可以调用的方法:
1)、如果是类 就用encodeObject: forKey:
2)、如果是普通的数据类型就用 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 可以调用的方法:
    1)、如果是类 就用decodeObjectForKey:
    2)、如果是普通的数据类型就用 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];

相关文章

网友评论

  • 踏云小子:NScoding具体用在什么地方呢,将自己定义的类的对象写入磁盘是为了持久化吗

本文标题: NScoder 和 NScoding

本文链接:https://www.haomeiwen.com/subject/owgncttx.html