1、概述

使用archiveRootObject:toFile:方法可以将一个对象直接写入到一个文件中,但有时候可能想将多个对象写入到同一个文件中,那么就要使用NSData来进行归档对象。

NSData可以为一些数据提供临时存储空间,以便随后写入文件,或者存放从磁盘读取的文件内容。可以使用[NSMutableData data]创建可变数据空间。

2、归档2个Person对象到同一文件中

归档(编码):

// 新建一块可变数据区

NSMutableData *data = [NSMutableData data];

// 将数据区连接到一个NSKeyedArchiver对象

NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];

// 开始存档对象,存档的数据都会存储到NSMutableData中

[archiver encodeObject:person1 forKey:@"person1"];

[archiver encodeObject:person2 forKey:@"person2"];

// 存档完毕(一定要调用这个方法)

[archiver finishEncoding];

// 将存档的数据写入文件

[data writeToFile:path atomically:YES];

3、从同一文件中恢复2个Person对象

恢复(解码):

// 从文件中读取数据

NSData *data = [NSData dataWithContentsOfFile:path];

// 根据数据,解析成一个NSKeyedUnarchiver对象

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

Person *person1 = [unarchiver decodeObjectForKey:@"person1"];

Person *person2 = [unarchiver decodeObjectForKey:@"person2"];

// 恢复完毕

[unarchiver finishDecoding];

4、利用归档实现深复制

比如对一个Person对象进行深复制:

// 临时存储person1的数据

NSData *data =

[NSKeyedArchiver archivedDataWithRootObject:person1];

// 解析data,生成一个新的Person对象

Student *person2 =

[NSKeyedUnarchiver unarchiveObjectWithData:data];

// 分别打印内存地址

NSLog(@"person1:0x%x", person1); // person1:0x7177a60

NSLog(@"person2:0x%x", person2); // person2:0x7177cf0

php nsdata,iOS开发之数据存储之NSData相关推荐

  1. iOS开发之数据存储

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

  2. iOS开发之数据存储之Preference(偏好设置)

    1.概述 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能. 每个应用都有个NSUserDefaults实例,通过它来存取偏好 ...

  3. iOS开发系列--数据存取

    原文地址为: iOS开发系列--数据存取 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation ...

  4. iOS开发之数据存取

    本文转载至 http://www.cocoachina.com/ios/20141111/10190.html 2014-11-11 13:43 编辑:suiling 分类:iOS开发 来源:崔江涛( ...

  5. Windows 8 应用开发 - 本地数据存储

    原文:Windows 8 应用开发 - 本地数据存储 在应用中通常会遇到用户主动或被动存储信息的情况,当应用关闭后这些数据仍然会存储在本地设备上,用户下次重新激活应用时会自动加载这些数据.下面将通过一 ...

  6. Android应用开发:数据存储和界面展现-1

    1. 相对布局RelativeLayout 特点:相对布局所有组件可以叠加在一起:各个组件的布局是独立的,互不影响:所有组件的默认位置都是在左上角(顶部.左部对齐) 属性 功能描述 android:l ...

  7. 安卓androidstudio访问本地接口_安卓开发之数据存储在本地的四种方式

    ​ 安卓开发之数据存储在本地的四种方式 本地数据存储,在安卓开发过程中是不可避免的一个话题.这些本地的数据可能是用户的设置,程序的设置,用户的数据图片, 也可能是网络传输的一些缓冲数据. 基本上我们有 ...

  8. Flutter开发之数据存储-2-文件存储(33)

    数据存储部分在移动开发中是非常重要的部分,无论是一些轻量级的数据(如用户信息.APP配置信息等)还是把需要长期存储的数据写入本地文件或者Sqlite3.都离不开数据存储,上一篇SharedPrefer ...

  9. iOS - OC PList 数据存储

    前言 直接将数据写在代码里面,不是一种合理的做法.如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低.因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如 ...

最新文章

  1. 搞懂机器学习的常用评价指标!
  2. Android -- 带你从源码角度领悟Dagger2入门到放弃(三)
  3. tstringgrid 单元格区域获取_对合并单元格的序号填充还在一个个的手动录入?那就真的Out了!...
  4. 算法笔记(一)——简述时间、空间复杂度分析
  5. 【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )
  6. MYSQL两个数据库字符集保持一致问题
  7. php设置key,phpstorm8 设置及license key
  8. sap内表 table_LINE
  9. Centos Missing Library: QtWebKit.so.4
  10. CSP2020洛谷P7077:函数调用
  11. CentOS7下LVS+Keepalived实现高性能高可用负载均衡
  12. JavaScript学习心得04
  13. 进程调度算法C语言实现
  14. QQ拼音输入法词库和搜狗输入法词库[相互导入](使用Excel公式)
  15. Javascript农历与公历相互转换
  16. 30天完成700万营业额,这家珠宝店的营销模式,值得借鉴!
  17. qq空间不能访问解决方法
  18. 基于微信小程序社区疫情防控系统 uniapp
  19. 使用Matlab绘制星座图
  20. 从telnet www.baidu.com 80 来玩一下http

热门文章

  1. jQuery Validate 验证,校验规则写在控件中的具体例子
  2. 分针网——怎么轻松学习JavaScript
  3. 同批号不同批次同一单据中出现数量不限制
  4. VMware 怎么进入BIOS
  5. Java 全半角转换
  6. 转 alsa录音放音执行流程详解
  7. CMOS图像传感器——TOF 图像传感器
  8. C# 数值和字符串之间的相互转换
  9. C#的两种类据类型:值类型和引用类型
  10. HALCON示例程序pcb_inspection.hdev检测pcb印刷缺陷