Archive(归档/反归档)

 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
时间: 2024-11-03 03:47:33

Archive(归档/反归档)的相关文章

沙盒机制 归档 反归档

//文件路径 //1.Home主目录:里面有Document, library,tem,和一个应用程序 NSLog(@"%@",NSHomeDirectory()); //2.Document路径 NSString *docuPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSLog(@"%@",docuPath); //3.Librar

归档反归档 - 本地沙盒存储复杂对象

NSString,NSNumber,NSArray,NSDictionary等简单对象可以方便的存储在本地沙盒文件中,而复杂的对象,诸如属性.方法较多的类对象,就需要使用归档反归档方法(序列化与反序列化),以NSData方式进行存储. 归档反归档,主要的操作顺序是:编码(enCoding) -> 归档(archiver) -> 解码(deCoding) -> 反归档(unarchiver) 1.编码与解码的方法,需要在类的声明文件中接受<NSCoding>协议,在实现文件.m

iOS 字符串的UTF8 编码 以及归档反归档

NSString* str = [@"%E4%B8%AD%E5%9B%BD" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"str=%@", str); NSString *str1 = @"中国"; NSString *str2 = [str1 stringByAddingPercentEscapesUsingEncoding:NSUTF8

归档反归档

//归档 反归档(麻烦的方法)    /*    //归档    //创建Person实例对象    Person *person1=[[Person alloc]init];    [email protected]"bbb";    [email protected]"39";        Person *person2=[[Person alloc]init];    [email protected]"aaa";    [email p

UI14-沙盒机制,文件的读写,文件管理器的增删移动复制,归档和反归档。

1.复杂对象的归档反归档.person类的使用acoder,进行编码.使用decoder进行根据标记,解码. 2.再使用多个person类中,需要转化工具和解转化工具,achiver,unchiever,记得结束要finish. 3.文件管理器 对文件和文件夹的增删改移动. 4.读取沙盒的文件,和三个主要路径 5.简单类的读取写入,string,数组,和字典.

IOS文件操作和自定义对象的归档(序列化)、反归档(反序列化)

IOS对文件操作包含文件的创建,读写,移动,删除等操作. 1.文件的创建: //设定文本框存储文件的位置 NSString *strFilePath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; //指定存储文件的文件名 NSString *fileName=[strFilePath stringByAppendingPathComponent:@

归档与反归档

一.归档操作 NSArray *array = @[@"归档",@"反归档",@"开始"]; //1.创建归档对象 NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]  initForWritingWithMutableData:data]; //2.归档 [archiver encodeObject:pe

iOS中的 沙盒文件夹 (数据的写入和读取,归档和反归档)

AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /** 沙盒中文件夹: 1.Documents : 存储长久保存的数据 2.library: Caches:存放的缓存,比如:视频,音频,图片,小说等等 Perferences:存储偏好设置,比如:应用程序是否是第一次启动 保存用户名和密码. 3.t

【iOS开发-存储】使用NSCoding归档和反归档

iOS开发中要想存储对象可以使用NSCoding,要想存储的对象必须实验NSCoding协议 比如我们要存储一个Student对象,那么Student类必须遵循NSCoding协议,然后实现NSCoding中得两个方法. @interface Student : NSObject <NSCoding> 然后再.m文件中实现encodeWithCoder:(存)和initWithCoder:(读)方法,这样就告诉了程序这个对象应该怎么存,要存那些属性,以及需要怎么读! /** * 将某个对象写入