归档

来源:互联网 发布:动漫周边店 淘宝 推荐 编辑:程序博客网 时间:2024/05/17 09:01

归档是一种数据转换过程,即将一组互相关联的对象转换为可存储及在应用程序间进行传递的形式。归档的最终结果—一份档案—是一份字节流,其中记录对象标识、对象封装的值以及对象间的关系。解档是相反的过程,它根据档案重新构建出完全相同的对象网络。

归档为对象持久化提供了通用的方案。开发者无需再按照某种特定文件格式输出对象的数据,而是将模型对象存储在可以输出成为文件的档案。通过归档,应用程序也可以将一个对象网络—通常称为对象图—传递给另外的应用程序。应用程序经常使用归档来实现诸如复制和粘贴这种剪贴板操作。

Archiving

如果类希望将实例保存到档案,则需要采用NSCoding协议,同时需实现协议要求的用于编解码对象的方法。Cocoa档案能够保存Objective-C对象、标量数值、C数组、结构体、字符串。档案会保存对象类型及其封装数据。如此一来,从字节流解码出来对象和编码成字节流的原始对象就完全相同。

键归档器和顺序归档器

Foundation框架提供两套类用于归解档对象网络。每套类都包含用于启动归解档过程的方法以及用于编解码对象实例数据的方法。这些类的对象有时也被称为归档器解档器

  • 键归档器和键解档器 (NSKeyedArchiver和 NSKeyedUnarchiver)。此类对象使用字符串作为键来标识待编解码数据。开发者,尤其是新应用程序的开发者,偏爱使用此类对象执行归档解档操作。

  • 顺序归档器和顺序解档器 (NSArchiver 和 NSUnarchiver)。“旧风格”归档以某种顺序编码对象状态,解档也需按照相同的顺序。这种方式只打算提供给遗留代码使用,新的应用程序应该使用键归档器。

创建和解码键档案

应用程序可以调用NSKeyedArchiver的 archiveRootObject:toFile:方法来创建档案。方法第一个参数接受一个对象图的根对象引用。从根对象开始,图中所有遵循NSCoding协议的对象都有一次将自身编码到档案的机会。归档生成的字节流将被写入指定文件。

解档按相反方向进行。应用程序通过调用 NSKeyedUnarchiver类的unarchiveObjectWithFile:方法来解档。您需要为方法提供一份档案,然后它会要求对象图中对象所属类解码相关字节流,并据此重建对象。如此循环进行,直至重建出对象图。方法最终会返回根对象的引用。

NSKeyedArchiver类的archivedDataWithRootObject: 和 unarchiveObjectWithData: 两个方法和上述的方法一样,不过它们处理数据对象而不是处理文件。

原创粉丝点击