美文网首页
5 NSCoding协议和NSCoder

5 NSCoding协议和NSCoder

作者: 哈库呐玛塔塔__ | 来源:发表于2020-05-13 02:27 被阅读0次

用来做数据存储,将对象可以写成一个二进制流,保存成一个本地文件。

NSCoding首先是一个协议,类实现这个协议,这个类的实例才能被编码(encode)和译码(decode)。类实现了这个协议,编码器才能在编码的时候知道如何编码,解码器才能在解码的时候知道如何解码。这个类才知道如何写成一个NSData,以及如何读取一个NSData将其转换为这个类。

这里边有两个方法:

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

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

其实就是定义了一个规则,编码解码的时候需要按照这个规则去操作。 但是编码解码的过程是由NSCoder的子类去调用的:

NSCoder又是什么?

NSCoder是一个抽象类,抽象类不能被实例化,只能提供一些想让子类继承的方法。下边两个就是其子类。

NSKeyedUnarchiver   从二进制流读取对象。

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

主要的作用如上所述,完成对象到二进制流的转换

如何实现自定义归档

自定义对象归档,其实就是将自定义类型先转换为一个NSData然后对其进行归档。所以自定义归档首先要解决的是两个问题,如何将一个自定义对象编码成一个NSData;以及如何在反归档的时候,如何将NSData转换为一个自定义的对象。

NSCoding协议解决了这两个问题。这个协议里边有两个方法:

1.就是从coder中读取数据,保存到相应的变量中去。

2.就是读取实例变量,序列化之后将数据写到coder中去。

实现了这两个方法,那么我们在归档或者反归档的时候就有了编码和解码的依据。

然后通过[NSKeyedArchiverarchiveRootObject:self.askQADraftModelArraytoFile:filePath];将数据保存到文件;

通过[NSKeyedUnarchiverunarchiveObjectWithFile:filePath];从文件中读取数据

相关文章

网友评论

      本文标题:5 NSCoding协议和NSCoder

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