Archive将多个对象归档到同一个文件
来源:互联网 发布:中国知网的数据库 编辑:程序博客网 时间:2024/05/16 11:30
使用archiveRootObject:toFile:方法可以将一个对象直接写入到一个文件中。但有时候可能想将多个对象写入到同一个文件中,那么就要使用NSData来进行归档对象。
NSData可以为一些数据提供临时存储空间,以便随后写入文件,或者存放从磁盘读取的文件内容。
可以使用[NSMutableData data]创建可变数据空间。
相关的原理图(截图引用):
//归档(编码) // 新建一块可变数据区 NSMutableData *data = [NSMutableData data]; // 将数据区连接到一个NSKeyedArchiver对象 NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; // 开始存档对象,存档的数据都会存储到NSMutableData中 [archiver encodeObject:person1 forKey:@"person1"]; [archiver encodeObject:person2 forKey:@"person2"]; // 存档完毕(一定要调用这个方法) [archiver finishEncoding]; // 将存档的数据写入文件 [data writeToFile:path atomically:YES]; //恢复(解码) // 从文件中读取数据 NSData *data = [NSData dataWithContentsOfFile:path]; // 根据数据,解析成一个NSKeyedUnarchiver对象 NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; Person *person1 = [unarchiver decodeObjectForKey:@"person1"]; Person *person2 = [unarchiver decodeObjectForKey:@"person2"]; // 恢复完毕 [unarchiver finishDecoding];这样就实现了多个对象的归档。同样那些相应的person对象也是需要和前面所讲的那样进行归档的设置。
从上面所用的person类来进行深拷贝:
<span style="color:#000000;">- (void)viewDidLoad { [super viewDidLoad]; Person* person1 = [[Person alloc]init]; // 临时存储person1的数据 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:person1]; // 解析data,生成一个新的Person对象 Student *person2 = [NSKeyedUnarchiver unarchiveObjectWithData:data]; // 分别打印内存地址 NSLog(@"person1:%p", person1); NSLog(@"person2:%p", person2);}结果显示:2015-08-19 15:42:46.797 ArchiveKey[2593:194031] person1:0x7fc021c330002015-08-19 15:42:46.798 ArchiveKey[2593:194031] person2:0x7fc021c2f140可以看到两个地址不相同的。</span>
0 0
- Archive将多个对象归档到同一个文件
- iOS archive(归档)的总结 (序列化和反序列化,持久化到文件)
- 归档(archive)文件(一)
- 归档(archive)文件(一)
- 归档(archive)文件(二)
- 归档(archive)文件(一)
- 如何将多个对象序列化到同一个文件和反序列化
- 归档(Archive)/解档(Unarchive)
- 数据保存到同一个对象里面
- iOS 归档 保存对象到本地
- 数据存储值归档Archive
- 将多个对象读写到文件
- Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)
- Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)
- 对象归档
- 对象归档
- 对象归档
- 对象归档
- 不得不吐槽的百度推送
- HTML中几种常见单位
- JMeter 下Javascript实现assert的注意点
- postman 发送json请求
- 收音机(FM2)加入自动唤醒功能
- Archive将多个对象归档到同一个文件
- openCV中IplImage的使用
- 我的第一个任务:handyscope接线
- Ubuntu NFS服务器的配置
- springMVC与Struts2
- SSH基本原理和免密码登录
- 黑马程序员—多线程
- 欢迎使用CSDN-markdown编辑器
- Hadoop例子之Sort