美文网首页
NScoder 和 NScoding

NScoder 和 NScoding

作者: 小小小Lucky | 来源:发表于2019-08-29 16:40 被阅读0次

    NScoder 和 NScoding

    0.03810-10 14:14字数387阅读8782

    NScoder 和 NScoding 有将自己定义的类的对象写入磁盘的作用

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

    -(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据

    -(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据

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

    NSKeyedUnarchiver 从二进制流读取对象。

    NSKeyedArchiver 把对象写到二进制流中去。

    4一个简单的例子

    一般是在自己定义的类中需要在.h 文件中加入

    在.m 文件众实现他的的两个代理方法,这个代理方法将会被自动调用

    (void)encodeWithCoder:(NSCoder *)aCoder

    {

    [aCoder encodeObject:self.InsureSolutionID forKey:@"personName"];

    [aCoder encodeObject:self.InsureSolutionName forKey:@"personAge"];

    }

    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];

    相关文章

      网友评论

          本文标题:NScoder 和 NScoding

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