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...
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- 基于UIControl控件实现ios点赞功能
- iOS开发中实现邮件和短信发送的简单示例