对象归档:

概念:

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

数据持久性的方式(事实上就是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可扩展自己的定义,运动图像裁剪框

    在实际项目中,常常要制作一个简易的图像裁剪功能,即获取一张图片.并用一个遮罩层选择目标范围并截取保存的功能.例如以下图所看到的: 在此分享下该自己定义视图的制作过程. 需求说明 整一个视图包括一个透明 ...

  2. 浙江大学PAT考试1069~1072(2013-11-2)

    11 题目地址:http://pat.zju.edu.cn/contests/pat-a-practise 1069: 由下降序和上升序两个四位数不断相减,然后得到新数据,始终会到达一个数字终止. 递 ...

  3. Object-c中间initialize 与 辛格尔顿

    简单说下initialize任务.在初始化过程中同样的类将被调用一次. 直接在代码解释initialize任务. 创建一个InitTest类 InitTest.m #import "Init ...

  4. IntelliJ Idea中一个编译报错引发的

    package verify; public class Verifier { private String name; public Verifier() { this.name = getClas ...

  5. 采用xshell链路本地虚拟机Linux

    昨天想安装在自己的机器看Linux.而使用xshell通路.但是这花了很长的时间,于xshell结束所有的提示"Could not connect to '192.168.54.100' ( ...

  6. PHP使用MySQL数据库

    原文:PHP使用MySQL数据库 PHP使用MySQL数据库,从建立连接到结果的显示. 完整代码如下: <?php //连接MySQL $db = mysql_connect("loc ...

  7. 使用 CodeIgniter 创建一个简单的 Web 站点

    原文:使用 CodeIgniter 创建一个简单的 Web 站点 参考源自: http://www.ibm.com/developerworks/cn/web/wa-codeigniter/index ...

  8. Android Loader使用,屏幕解锁,重复荷载

    正在使用AsyncTaskLoader时间.当手机被解锁,重复加载数据,码,如以下: static class CouponShopQueryLoader extends AsyncTaskLoade ...

  9. AssetManager asset使用

    Android 该系统提供了一个程序为每个新的设计/assets文件夹.保存该文件在此文件夹可以在一个程序被打包./res 和/assets所不同的是,android不/assets下生成的文件ID. ...

  10. 让UIAlertController兼容的同时iphone和ipad

    让UIAlertController兼容的同时iphone和ipad by 吴雪莹 var alert = UIAlertController(title: nil, message: message ...