11.9 对象序列化的要点
2014-11-09 14:40
127 查看
对象系列化要点
1.数据模型类的创建,并且在数据模型类中实现<NSCoding>协议
//序列化所调用的方法
- (void)encodeWithCoder:(NSCoder*)aCoder
{
NSLog(@"-======------1111");
//编码的是该对象的属性
[aCoderencodeObject:self.nameforKey:@"NAME_KEY"];
[aCoderencodeObject:self.numberforKey:@"NUMBER_KEY"];
}
//反序列化所调用的方法
- (id)initWithCoder:(NSCoder*)aDecoder
{
self= [superinit];
if(self) {
NSLog(@"-======------2322222233222");
//解码的也是对象的属性,按照编码时所指定的key进行解码
self.name= [aDecoderdecodeObjectForKey:@"NAME_KEY"];
self.number= [aDecoderdecodeObjectForKey:@"NUMBER_KEY"];
}
returnself;
}
//把该对象存储到本地
//1.创建的一个可变data,将来存放序列化(编码)的数据的
NSMutableData*data = [[NSMutableDataalloc]init];
//创建一个序列化的对象,并且告诉这个对象,序列化后的数据所存放的地方
NSKeyedArchiver*archiver = [[NSKeyedArchiveralloc]initForWritingWithMutableData:data];
//2.开始序列化,并指定一个key
[archiverencodeObject:userforKey:@"USER_KEY"];
//3.结束序列化
[archiverfinishEncoding];
//4.指定一个存储路径
NSString*path = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/info.plist"];
//存储data
[datawriteToFile:pathatomically:YES];
//5.解决内存问题
[datarelease];
[archiverrelease];
以下为反序列化
//1.去存储的序列化数据
NSString*path = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/info.plist"];
//判断文件是否存在
if([[NSFileManagerdefaultManager]fileExistsAtPath:path]) {
//获取路径中的data数据
NSData*data = [NSDatadataWithContentsOfFile:path];
//2.告诉反序列化对象,需要解码哪些数据
NSKeyedUnarchiver*unArchiver = [[NSKeyedUnarchiveralloc]initForReadingWithData:data];
//3.根据指定的key取出原来存放的对象
ZYUser*user = [unArchiverdecodeObjectForKey:@"USER_KEY"];
//Class test = NSClassFromString(@"ZYUser");
//4.结束反序列化
[unArchiverfinishDecoding];
//5.解决内存问题
[unArchiverrelease];
self.nameTf.text= user.name;
self.numberTf.text= user.number;
}
1.数据模型类的创建,并且在数据模型类中实现<NSCoding>协议
//序列化所调用的方法
- (void)encodeWithCoder:(NSCoder*)aCoder
{
NSLog(@"-======------1111");
//编码的是该对象的属性
[aCoderencodeObject:self.nameforKey:@"NAME_KEY"];
[aCoderencodeObject:self.numberforKey:@"NUMBER_KEY"];
}
//反序列化所调用的方法
- (id)initWithCoder:(NSCoder*)aDecoder
{
self= [superinit];
if(self) {
NSLog(@"-======------2322222233222");
//解码的也是对象的属性,按照编码时所指定的key进行解码
self.name= [aDecoderdecodeObjectForKey:@"NAME_KEY"];
self.number= [aDecoderdecodeObjectForKey:@"NUMBER_KEY"];
}
returnself;
}
//把该对象存储到本地
//1.创建的一个可变data,将来存放序列化(编码)的数据的
NSMutableData*data = [[NSMutableDataalloc]init];
//创建一个序列化的对象,并且告诉这个对象,序列化后的数据所存放的地方
NSKeyedArchiver*archiver = [[NSKeyedArchiveralloc]initForWritingWithMutableData:data];
//2.开始序列化,并指定一个key
[archiverencodeObject:userforKey:@"USER_KEY"];
//3.结束序列化
[archiverfinishEncoding];
//4.指定一个存储路径
NSString*path = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/info.plist"];
//存储data
[datawriteToFile:pathatomically:YES];
//5.解决内存问题
[datarelease];
[archiverrelease];
以下为反序列化
//1.去存储的序列化数据
NSString*path = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/info.plist"];
//判断文件是否存在
if([[NSFileManagerdefaultManager]fileExistsAtPath:path]) {
//获取路径中的data数据
NSData*data = [NSDatadataWithContentsOfFile:path];
//2.告诉反序列化对象,需要解码哪些数据
NSKeyedUnarchiver*unArchiver = [[NSKeyedUnarchiveralloc]initForReadingWithData:data];
//3.根据指定的key取出原来存放的对象
ZYUser*user = [unArchiverdecodeObjectForKey:@"USER_KEY"];
//Class test = NSClassFromString(@"ZYUser");
//4.结束反序列化
[unArchiverfinishDecoding];
//5.解决内存问题
[unArchiverrelease];
self.nameTf.text= user.name;
self.numberTf.text= user.number;
}
相关文章推荐
- java 对象的序列化 要点
- Java对象的XML序列化和反序列化 - (2)
- 序列化与对象克隆
- JavaScript中的对象序列化介绍
- ObjectOutputStream对象输入输出流和可序列化的简单理解
- java 序列化对象 serializable 读写数据
- go语言序列化对象为二进制
- jQuery serializeObject 序列化form表单Json对象 jQuery.extend()合并对象
- JAVA序列化对象
- JAVA 对象序列化(二)——Externalizable
- 序列化实现对象的拷贝
- Java学习之对象序列化(一)
- EF提示“序列化类型为XXX的对象时检测到循环引用”
- 利用序列化将java对象深拷贝
- .net中对象序列化技术浅谈
- 对象序列化至硬盘
- JSON序列化(自定义对象,字典,数组的序列化)
- 简单对象的序列化
- TypeError: datetime.datetime(2016, 9, 25, 21, 12, 19, 135649) is not JSON serializable解决办法(json无法序列化对象的解决办法)
- Java对象序列化/反序列化的注意事项