对象归档:

概念:

对象归档是指将对象写入文件保存在硬盘,当再次又一次打开程序时,能够还原这些对象。也称:对象序列化、对象持久化。

数据持久性的方式(事实上就是3类)

1,NSKeyedArchiver——对象归档

2,NSUserDefaults  3,属性列表

4,SQLite数据库  5,Core Data数据库

归档方式:

对Foundation库中对象进行归档

自己定义对象进行归档(须要实现归档协议,NSCoding)

归档与属性列表的差别:

1,归档后的文件是加密的,属性列表是明文的。

2,属性列表不能存储自己定义对象类型,归档能够。

代码实现:

//对象归档,对象反归档
int main(int argc, char * argv[])
{
@autoreleasepool {
// return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
//归档(序列化)
NSArray *array = @[@"abc",@"123",@1234]; NSString *homePath = NSHomeDirectory();
NSLog(@"homePath :%@",homePath);
NSString *path = [homePath stringByAppendingPathComponent:@"test.archive"]; //文件和扩展名随便取 BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:path];
if (success) {
NSLog(@"archive success");
}
}
return 0;
}

这是就生成了一个加密文件。

打开

6270 6c69 7374 3030 d401 0203 0405 081c
1d54 2474 6f70 5824 6f62 6a65 6374 7358
2476 6572 7369 6f6e 5924 6172 6368 6976
6572 d106 0754 726f 6f74 8001 a609 0a12
1314 1555 246e 756c 6cd2 0b0c 0d0e 5624
636c 6173 735a 4e53 2e6f 626a 6563 7473
8005 a30f 1011 8002 8003 8004 5361 6263
5331 3233 1104 d2d2 1617 181b 5824 636c
6173 7365 735a 2463 6c61 7373 6e61 6d65
a219 1a57 4e53 4172 7261 7958 4e53 4f62
6a65 6374 574e 5341 7272 6179 1200 0186
a05f 100f 4e53 4b65 7965 6441 7263 6869
7665 7208 1116 1f28 3235 3a3c 4349 4e55
6062 6668 6a6c 7074 777c 8590 939b a4ac
b100 0000 0000 0001 0100 0000 0000 0000
1e00 0000 0000 0000 0000 0000 0000 0000

int main(int argc, char * argv[])
{
@autoreleasepool {
// return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
//归档(序列化)
// NSArray *array = @[@"abc",@"123",@1234];
//
// NSString *homePath = NSHomeDirectory();
// NSLog(@"homePath :%@",homePath);
// NSString *path = [homePath stringByAppendingPathComponent:@"test.archive"]; //文件和扩展名随便取
//
// BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:path];
// if (success) {
// NSLog(@"archive success");
// } //解归档(反序列化)
NSString *homePath = NSHomeDirectory();
NSString *path = [homePath stringByAppendingPathComponent:@"test.archive"];
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@"NSKeyedUnarchiver:%@",array);
}
return 0;
}

这种方法的缺陷:

一个对象归档成一个文件,当对象许多时很麻烦。

以下的方式能够解决问题:

归档:

1,使用NSData实例作为归档的存储数据

2,加入归档的内容(设置key和value)

3,完毕归档

4,将归档数据存入磁盘中

解归档:

1,从磁盘中读取文件,生成NSData实例

2,依据Data实例创建和初始化解归档实例

3,解归档,依据key訪问value的值。

iOS文档序列化(对象归档)的更多相关文章

  1. iOS数据存储之对象归档

    iOS数据存储之对象归档 对象归档 对象归档是iOS中数据持久化的一种方式. 归档是指另一种形式的序列化,但它是任何对象都可以实现的更常规的类型.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文 ...

  2. Javascript学习8 - 脚本化文档(Document对象)

    原文:Javascript学习8 - 脚本化文档(Document对象) 每个Web浏览器窗口(或帧)显示一个HTML文档,表示这个窗口的Window对象有一个document属性,它引用了一个Doc ...

  3. iOS 数据持久性存储-对象归档

    对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为解档,反序列化) 主要涉及两个类:NSKeyedArichiver.NSKey ...

  4. iOS文档预览功能教程

     本文转载至 http://blog.csdn.net/devday/article/details/6580444   文档iosuinavigationcontrollerextensionmic ...

  5. iOS文档注释

    Eclipse和IntelliJ IDEA系的IDE都有自动生成文档注释的功能,Xcode虽然安装了VVDocument,但是仍然感觉注释的功能不是很完善,于是今天整理了一下书写文档注释的一些用法. ...

  6. 【转载自友盟消息推送iOS文档】在appDelegate中注册推送

    1.2   基本功能集成指南 提示 请先在友盟的消息推送管理后台中创建App,获得AppKey和AppSecret 导入SDK 下载 UMessage_Sdk_All_x.x.x.zip并解压缩 导入 ...

  7. ***微信小程序学习文档和资料归档收集

    微信小程序官方文档: https://cloud.tencent.com/document/product/619 小程序培训视频教程: https://xw.qq.com/edu/201805140 ...

  8. iOS 文档分享相关

    在非系统预览情况下  指定文件打开系统分享菜单 NSString *savedPath = [NSHomeDirectory() stringByAppendingString:[NSString s ...

  9. VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)

    前面一节中鸡啄米进行了文档.视图和框架的概述,本节主要讲解文档.视图.框架结构中各对象之间的关系. 各个对象之间的关系 文档.视图.框架结构中涉及到的对象主要有:应用程序对象.文档模板对象.文档对象. ...

随机推荐

  1. 变化Android系统属性SystemProperties.set("sys.powerctl", "shutdown")关机分析

    基本介绍: 从以前的博客中提到,我们,最后,通过关机过程变化Android关机属性(SystemProperties.java由JNI呼叫接入系统属性),当然,我们也能adb命令变化Android系统 ...

  2. NSIS:简单按钮美化插件SkinButton,支持透明PNG图片。

    原文 NSIS:简单按钮美化插件SkinButton,支持透明PNG图片. 征得作者贾可的同意,特发布按钮美化插件SkinButton. 插件说明: 使用GDI+库写的一个简单按钮美化插件,支持透明P ...

  3. 7 Ways to earn money on programming(转)

    英文原文:7 Ways to earn money on programming 几个星期前,当我收到一个自称 Someone712 的人发给我的一条消息时,我决定要写一篇如何用编程赚钱的博客文章.S ...

  4. 一个Bug的反思

    对输入数据判重,使用Map,将对象作为Key,使用map的containsKey方法来着重是否是重复记录.正常的处理流程:(1)将输入的数据封装成对象(2)判重,将没有重复的数据存储到map(3)对没 ...

  5. 【ThinkingInC++】2、输入和输出流

    /** *特征:输入和输出流 *时间:2014年8月8日07:37:35 *作者:cutter_point */ #include<iostream> using namespace st ...

  6. MFC属性页对话框

    属性页对话框 分类 分页和引导 类 CPropertyPage-父亲CDialog类别,所谓的属性页或网页对话框. CPropertySheet-父类是CWnd,称为属性表单. 一个完整的属性页对话框 ...

  7. [2013山东ACM]省赛 The number of steps (可能DP,数学期望)

    The number of steps nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; ...

  8. 体验VS2015正式版

    初次体验VS2015正式版,安装详细过程.   阅读目录 介绍 安装 介绍    纽约时间7月20日,微软发布了vs 2015 正式版,换算到我们的北京时间就是晚上了,今天回到家里,就下下来了,装上去 ...

  9. CSS+DIV+JQuery实际的视频汇总

    在牛腩中学习过CSS和DIV.在JS中学习过CSS+JS 封装,在这里又回想了一遍,也作为查漏补缺,也算比較系统的复习了一遍吧. css核心内容主要包含四个方面:标准流.盒子模型,浮动和定位,而在B/ ...

  10. CSDN Markdown简明教程4-UML画画

    0.文件夹 文件夹 前言 序列图 1 序列图演示样例 2 序列图语法 流程图 1 流程图演示样例 2 流程图语法 节点定义 节点连接 Gravizo 声明 1. 前言 Markdown是一种轻量级的标 ...