首页 > 代码库 > 【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结
【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结
对对象进行归档,和对对象进行拷贝差不多路数,也就是需要协议,之前的时对NSString和NSNumber这些对象为什么没有归档协议?因为它们自带了。
所以如果我们要对自定义的对象(而不是Foundation里默认的对象)进行归档的话就需要引入归档协议<NSCoding>。
举例:声明一个User类,然后创建一个对象user1,把这个user1进行归档,然后把归档后的文件解归档到user2中,看看是否是原先的那些数据。
(1)User.h
#import <Foundation/Foundation.h> @interface User : NSObject<NSCoding> //对自定义对象的归档和解归档需引入协议,就像要拷贝对象,那么这个类要引入拷贝协议一样 @property(nonatomic,copy) NSString *name; @property(nonatomic,copy) NSString *email; @property(nonatomic,copy) NSString *passwd; @property(nonatomic,assign) int age; @end
(2)User.m
#import "User.h" @implementation User //以下两个函数格式是系统默认,直接点击NSCoding查看并复制过来即可 - (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeInt:_age forKey:@"age"]; [aCoder encodeObject:_name forKey:@"name"]; [aCoder encodeObject:_email forKey:@"email"]; [aCoder encodeObject:_passwd forKey:@"passwd"]; } - (id)initWithCoder:(NSCoder *)aDecoder{ self=[super init]; if (self!=nil) { _age=[aDecoder decodeIntForKey:@"age"]; self.name=[aDecoder decodeObjectForKey:@"name"]; self.email=[aDecoder decodeObjectForKey:@"email"]; self.passwd=[aDecoder decodeObjectForKey:@"passwd"]; } return self; } @end
(3)main.m
#import <Foundation/Foundation.h> #import "User.h" int main(int argc, const char * argv[]) { @autoreleasepool { //初始化一个对象病赋值 User *user1=[[User alloc]init]; user1.age=20; user1.name=@"jack"; user1.email=@"123@163.com"; user1.passwd=@"123456"; //创建文件路径 NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"self.arc"]; //把这个对象归档 BOOL success=[NSKeyedArchiver archiveRootObject:user1 toFile:filePath]; if (success) { NSLog(@"success"); } //解归档 User *user2=[NSKeyedUnarchiver unarchiveObjectWithFile:filePath];//解归档到另一个对象中 NSLog(@"%d,%@,%@,%@",user2.age,user2.name,user2.email,user2.passwd);//输出,完好 } return 0; }
归档结果,生成一个文件:
解归档结果:
20,jack,123@163.com,123456
结合之前的一篇笔记,总结:
a:归档的时候,就是先有一个对象,然后有一个最终文件路径,然后利用[NSKeyedArchiver archiveRootObject:<#(id)#> toFile:<#(NSString *)#>]把对象归档到这个文件中;
b:解归档就是,这个归档的对象是什么类型的,你就用什么类型的对象去接这个解归档生成的东西,解归档之后就可以正常使用这个对象了;
c:归档其实有两种方式:上面总结是简单地就是直接把对象归档到一个文件里。还有一种复杂的就是上一个笔记用得例子,把数据对象data进行归档>>>用归档函数把数据写入到data中>>>把data写入到最终文件中,解归档的路径是先把文件接成data对象然后调用里面的数据,其实一般data是一个字典格式;
d:根据对象是自带的还是自定义的,归档也有些许区别:自定义对象要实现归档,那么它的类必须引入归档协议<NSCoding>;
e:归档后的数据内容都是加密的。
【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。