About Object Storage 对象归档

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. 从指定的路径中取出文件,读取出来.
    */

归档自定义类型

  • 类似于之前深复制/浅复制要遵循协议,这里的自定义类型,要遵循协议

你可能感兴趣的:(About Object Storage 对象归档)