iOS开发培训课程-第二阶段 Objective-C(下
- 第15天 对象归档
XML -- plist
- 存储的内容是键值对
- plist 可存储的对象类型包括NSData,BOOL,NSString,NSDate,NSArray,NSDictionary
- 存储plist和读取
- 将对象存储至plist: 需要对象和路径,路径是完整路径,包含后缀名
- 读取,是NSString或其他可归档类的类方法,如[NSString stringWithContentOfFile:(NSString *)path encoding...]等等
// 将一个对象存储(归档)至指定目录
-(void)DataStorage{
//存储需要 对象及路径
NSString *str = @"Hellow";//对象
NSString *path = @"/tmp/test.plist";//完整路径,包括待创建的文件名
BOOL result = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSLog(@"success? = %d",result);
// 读取,需要路径和编码类型,比如UTF8
NSString *getStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"get string = %@",getStr);
}
Key - Value -- NSKeyedArchiver 和 NSKeyedUnarchiver
NSKeyedArchiver 继承 NSCoder 压缩文件
两个类方法: 压缩后保存
//1. 将给定对象,压缩成二进制NSData类型,返回NSData
+ (NSData *)archiverDataWithRootObject: (id)rootObject;
//2. 压缩目标文件rootObject成二进制至指定路径
+ (BOOL)archiverRootObject:(id)rootObject toFile:(NSString *)path;
NSKeyedUnarchiver 解压缩,从指定路径获取文件内容
+ (id)unarchiveObjectWithFile:(NSString *)path;
/*+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path; 归档用以完成真正的深复制*/
[NSKeyedArchiver archiveRootObject:array_AA toFile:@"/tmp/testArchiver.txt"];
NSMutableArray *array_CC = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/tmp/testArchiver.txt"];
/*
1. 压缩文件至指定路径,这样无论如何修改 array_AA,不论深浅,都不会影响到已经被归档的array_CC
2. 从指定的路径中取出文件,读取出来.
*/
归档自定义类型
- 类似于之前深复制/浅复制要遵循<NSCopy>协议,这里的自定义类型,要遵循<NSCoding>协议