数据持久化-归档和反归档

1. NSCoding + NSKeyArchiver

  要想对数据进行归档,首先你要遵守NScoding协议

举例:下面用万能的person类来进行举例,该类有两个属性,分别是:name 和 age;在.h文件中

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCoding>//归档和反归档之前必须遵循这个协议

@property(nonatomic, copy)NSString *name;

@property(nonatomic, assign)NSInteger age;

@end

在.m文件中 实现协议中的两个方法:

//编码
- (void)encodeWithCoder:(NSCoder *)acode
{//将person中的属性编号标签
    [acode encodeObject: self.name forKey:@"key_name"];
    
    [acode encodeObject: self.age forKey:@"key_age"];
}
//反编码
-(id)initWithCode:(NSCode *)aDecoder
{
    if(self = [super init])
    {
       self.name = [aDecoder decodeObjectForKey:@"key_name"];
       
       self.age = [aDecode decodeObjectForKey:@"key_age"];
    }
}
//写入数据
首先要对归档的类进行初始化
Person *person = [[Person alloc]init]; person.name = @"小明"; person.age = 22;

//将数据以NSData的形式临时储存
NSMutableData *persondata = [[NSMutableData alloc]init]; 

//创建归档工具,将data存储在此
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:persondata];

//进行二进制转换
[archiver encodeObject:person forKey:@"p1"];

[archiver finishEncoding];

//将数据写入tem(随便写一个地方,正式用一般放在doucement),获取应用的tem路径
NSString *tempath = NSTemporaryDirectory();

//在路径后面拼接写入的文件名
NSString *temappending = [tempath stringByAppendingPathComponent:@"1.txt"];

//写入这个文件
[persondata writeToFile:temapppending atomicakky: YES];
//读出数据
//从上面路径取出data数据
NSData *data = [NSData dataWithContentOfFile:temappending];

//创建反归档工具
NSKeyedUnarchiver *unarchiver = [[NSKeyUnarchiver alloc]initWithReadingWithData:data];

//通过反归档工具获取对象,将二进制转回
Person *person1 = [unarchiver decodeObjectForKey:@"p1"];

//结束
[unarchiver finishDecoding];


你可能感兴趣的:(数据持久化-归档和反归档)