标签:
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString * filePath = @"/Users/student/Desktop/snail/array.data";
//对官方类创建的对象进行存储
NSArray * array = @[@"one",@"two",@"three"];
//-------------------------归档--------------------------
//将array归档为文件 后缀一般为.data .data文件是二进制文件 打不开
/*
参数
第一个参数 归档的对象
第二个参数 文件的路径
*/
[NSKeyedArchiver archiveRootObject:array toFile:filePath];
//-------------------------解档--------------------------
NSArray * arr = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
/*
(
one,
two,
three
)
*/
NSLog(@"%@",arr);
//------------对自定义类型的对象进行归、解档-----------------
/*
对自定义类型的对象进行归档时,需要实现一个协议(NSCoding),并且实现协议中得方法
新建一个dog类 里面有名字name和age属性
*/
NSString * dogPath = @"/Users/student/Desktop/snail/dog.data";
Dog * dog = [[Dog alloc] init];
dog.name = @"刀刀";
dog.age = 23;
//----------------------归档--------------------
BOOL ret1 = [NSKeyedArchiver archiveRootObject:dog toFile:dogPath];
if (ret1) {
NSLog(@"归档成功");
}else{
NSLog(@"失败");
}
//----------------------解档--------------------
Dog * dog1 = [NSKeyedUnarchiver unarchiveObjectWithFile:dogPath];
NSLog(@"%@",dog1.name);
}
return 0;
}
Dog.h
#import <Foundation/Foundation.h> //NSCoding 实现这个协议 @interface Dog : NSObject <NSCoding> @property NSString * name; @property int age; @end
#import "Dog.h"
@implementation Dog
//归档自定义对象时调用的方法
- (void)encodeWithCoder:(NSCoder *)aCoder{
//key的值是可以随便写的 但是在解档的方法里 要跟key的值一样的
//name是NSString类型 用encodeObject方法
[aCoder encodeObject:self.name forKey:@"NAME"];
//age是int类型,用encodeInt方法
[aCoder encodeInt:self.age forKey:@"AGE"];
}
//解档自定义对象时调用的方法
- (id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"NAME"];
self.age = [aDecoder decodeIntForKey:@"AGE"];
}
return self;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qq1791422018/article/details/47107787