您的位置:首页 > 移动开发 > IOS开发

ios归档

2015-10-12 12:46 393 查看
归档好比java中的序列化反序列化,即把内存中对象保存到硬盘中,同时可以把硬盘中对象读入内存
        
         自定义类需要实现<NSCoding>协议并实现- (void)encodeWithCoder:(NSCoder *)coder 和 - (id)initWithCoder:(NSCoder *)coder才能被归档,

归档可以自动实现深复制

//
//  main.m
//  bundle
//
//  Created by Young on 15/10/12.
//  Copyright (c) 2015年 Young. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MyData : NSObject<NSCoding>

@property NSString* color;
@property double weight;
@property int size;

@end

@implementation MyData

- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:_color forKey:@"color"];
[coder encodeDouble:_weight forKey:@"weight"];
[coder encodeInt:_size forKey:@"size"];

}

- (id)initWithCoder:(NSCoder *)coder
{

_color=[coder decodeObjectForKey:@"color"];
_weight=[coder decodeDoubleForKey:@"weight"];
_size=[coder decodeIntForKey:@"size"];
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"color=%@, weight=%f, size=%d", _color,_weight,_size];
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {

/*归档好比java中的序列化反序列化,即把内存中对象保存到硬盘中,同时可以把硬盘中对象读入内存

自定义类需要实现<NSCoding>协议并实现- (void)encodeWithCoder:(NSCoder *)coder 和 - (id)initWithCoder:(NSCoder *)coder才能被归档,
*/
NSArray* arr=@[@"abc",@"def",@"xyz"];

[NSKeyedArchiver archiveRootObject:arr toFile:@"data.dat"];

NSArray* a=[NSKeyedUnarchiver unarchiveObjectWithFile:@"data.dat"];

NSLog(@"%@",a);

MyData*dat=[MyData new];
[dat setColor:@"red"];
[dat setWeight:2.0];
[dat setSize:10];

[NSKeyedArchiver archiveRootObject:dat toFile:@"mydat"];
dat=[NSKeyedUnarchiver unarchiveObjectWithFile:@"mydat"];
NSLog(@"%@",dat);

//        可以使用NSData把多个对象一起归档

NSDictionary* dic=@{@"a":@"1"
,@"b":@"2"
,@"c":@"3"
};

NSMutableData* mulData=[NSMutableData data];
//用NSMutableData初始化NSKeyedArchiver
NSKeyedArchiver* mulKA=[[NSKeyedArchiver alloc]initForWritingWithMutableData:mulData];

[mulKA encodeObject:arr forKey:@"arr"];
[mulKA encodeObject:dic forKey:@"dic"];
[mulKA encodeObject:dat forKey:@"mydata"];
[mulKA encodeObject:@"string..." forKey:@"str"];
//调用finishEncoding完成归档
[mulKA finishEncoding];
//保存到mulData.dat文件中
if ([mulData writeToFile:@"mulData.dat" atomically:YES]==NO) {
NSLog(@"归档失败");
}else
NSLog(@"归档成功");

//////
//从mulData.dat文件中归档
NSData*data=[NSData dataWithContentsOfFile:@"mulData.dat"];
NSKeyedUnarchiver* nskn=[[NSKeyedUnarchiver alloc]initForReadingWithData:data];

arr=[nskn decodeObjectForKey:@"arr"];
dic=[nskn decodeObjectForKey:@"dic"];
dat=[nskn decodeObjectForKey:@"mydata"];
NSString* s=[nskn decodeObjectForKey:@"str"];

//调用finishDecoding完成归档
[nskn finishDecoding];

NSLog(@"decodeObject   %@  \n%@ \n  %@ \n  %@",arr,dic,dat,s);

}
return 0;
}


打印如下

2015-10-12 12:41:50.765 bundle[1426:101541] (
abc,
def,
xyz
)
2015-10-12 12:41:50.769 bundle[1426:101541] color=red, weight=2.000000, size=10
2015-10-12 12:41:50.772 bundle[1426:101541] 归档成功
2015-10-12 12:41:50.773 bundle[1426:101541] decodeObject   (
abc,
def,
xyz
)
{
a = 1;
b = 2;
c = 3;
}
color=red, weight=2.000000, size=10
string...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios