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

Archive(归档/反归档)

时间:2016-03-10 23:24:47      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

 1 #import "ViewController.h"
 2 #import "Person.h"
 3 @interface ViewController ()
 4 
 5 @end
 6 
 7 @implementation ViewController
 8 
 9 - (void)viewDidLoad {
10     [super viewDidLoad];
11     Person *p1 = [Person new];
12     p1.name = @"Jackie Chan";
13     p1.age = 16;
14     //将复杂对象转为NSData,归档(序列化)
15     NSData *p1Data = [NSKeyedArchiver archivedDataWithRootObject:p1];
16     
17     //创建路径,存储p1Data
18     NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"person"];
19     NSLog(@"%@",path);
20     [p1Data writeToFile:path atomically:YES];
21 
22     //读取文件中的数据
23     NSData *p2Data = [NSData dataWithContentsOfFile:path];
24     Person *p2 = [NSKeyedUnarchiver unarchiveObjectWithData:p2Data];
25     
26     NSLog(@"%@,%ld",p2.name,p2.age);
27     p2.name = @"Bruce Lee";
28     p2.age = 18;
29 
30     //使用归档工具进行归档
31     NSMutableData *mdata = [[NSMutableData alloc] init];
32     NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mdata];
33     //进行归档
34     [archiver encodeObject:p1 forKey:@"person1"];
35     [archiver encodeObject:p2 forKey:@"person2"];
36     //结束归档
37     [archiver finishEncoding];
38     NSLog(@"%@",mdata);
39     //反归档
40     //反归档工具
41     NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:mdata];
42     //进行反归档
43     Person *p3 =  [unarchiver decodeObjectForKey:@"person1"];
44     Person *p4 = [unarchiver decodeObjectForKey:@"person2"];
45     NSLog(@"%@ %ld",p3.name,p3.age);
46     NSLog(@"%@ %ld",p4.name,p4.age);
47     //结束反归档
48     [unarchiver finishDecoding];
49 }
1 #import <Foundation/Foundation.h>
2 
3 @interface Person : NSObject<NSCoding>
4 @property(nonatomic,copy) NSString *name;
5 @property (nonatomic,assign) NSInteger age;
6 @end
 1 #import "Person.h"
 2 
 3 @implementation Person
 4 //归档(序列化) 协议方法,将属性转为二进制数据
 5 - (void)encodeWithCoder:(NSCoder *)aCoder
 6 {
 7     [aCoder encodeObject:self.name forKey:@"name"];
 8     [aCoder encodeInteger:self.age forKey:@"age"];
 9 }
10 //反归档(反序列化)方法,将二进制数据恢复为属性
11 - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder
12 {
13     self = [super init];
14     if (self) {
15         self.name = [aDecoder decodeObjectForKey:@"name"];
16         self.age = [aDecoder decodeIntegerForKey:@"age"];
17         
18     }
19     return self;
20 }
21 @end

 

Archive(归档/反归档)

标签:

原文地址:http://www.cnblogs.com/DevinSMR/p/5263701.html

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