码迷,mamicode.com
首页 > 其他好文 > 详细

Archive将多个对象归档到同一个文件

时间:2015-08-19 16:55:08      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:多个对象归档   nskeyedarchiver   nskeyedunarchiver   nsdata   nsdata数据转化   

使用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:0x7fc021c33000
2015-08-19 15:42:46.798 ArchiveKey[2593:194031] person2:0x7fc021c2f140
可以看到两个地址不相同的。
</span>


版权声明:本文为博主原创文章,未经博主允许不得转载。

Archive将多个对象归档到同一个文件

标签:多个对象归档   nskeyedarchiver   nskeyedunarchiver   nsdata   nsdata数据转化   

原文地址:http://blog.csdn.net/u012496940/article/details/47781305

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!