NScoder 和 NScoding

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NSCoding1、为了将应用数据存储到硬盘中,iOS提供基本的文件API、Property List序列化、SQ...
    iOS_愛OS阅读 3,084评论 0 0
  • 一、归档的基本概念 之前将数据保存本地,只能是字符串、数组、字典、NSNuber、BOOL等容器类对象对象,不能将...
    空白Null阅读 5,242评论 1 10
  • 下面是我最近两年学习OC中的一些基础知识,对于学习OC基础知识的人可能有些帮助,拿出来分享一下,还是那句话不喜勿喷...
    小小赵纸农阅读 2,667评论 1 7
  • 协议声明类需要实现的的方法,为不同的类提供公用方法,一个类可以有多个协议,但只能有一个父类,即单继承。它类似jav...
    狼之独步阅读 2,336评论 0 1
  • 一、数据持久化概述 数据持久化就是数据的永久存储。其本质是将数据保存为文件,存到程序的沙盒中。 1、数据持久化的方...
    lilinjianshu阅读 649评论 0 1