iOS NSData归档

2018-07-18  本文已影响12人  肉肉要次肉

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

* NSData可以为一些数据提供临时存储空间,以便随后写入文件,或者存放从磁盘读取的文件内容。可以使用[NSMutableData data]创建可变数据空间,确保继承的实例变量也能被解码

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

归档(编码):

//新建一块可变数据区

NSMutablData *data = [NSMutablData  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];


解档:

//从文件中读取数据

NSData *data = [NSData dataWithContentsOfFile:path];

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

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

Person *person1 = [unarchiverdecodeObjectForKey:@"person1"];

Person *person2 = [unarchiverdecodeObjectForKey:@"person2"];

[unarchiver  finishDecoding];

利用归档实现深复制

//临时存储person1的数据

NSData *data = [NSKeyedArchiver archiverdDataWithRootObject:person1];

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

Student *person2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];

//分别打印内存地址

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

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

上一篇下一篇

猜你喜欢

热点阅读