【Objective-C基础】数据持久化--对象归档
2016-06-30 10:12
309 查看
原文:http://www.2cto.com/kf/201310/248330.html
一、数据持久化的方式
1、NSKeyedArchiver--对象归档
2、属性列表化(NSArray、NSDictionary、NSUserDefault)
3、SQlite数据库、CoreData数据库
其中第一、二种方式针对数据量小的数据,第三种方式针对大数据,归档的文件是加密的,属性列表明文的。
归档的形式;
A、对foundation库中对象进行归档
B、自定义对象的归档(需要实现归档协议:NSCoding)
二、最简单归档和解归档的实现代码:
@autoreleasepool { NSString *homeDictory=NSHomeDirectory(); NSArray *array=[NSArray arrayWithObjects:@"one",@"two",@"three",nil]; NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/test.archive"]; if(![NSKeyedArchiver archiveRootObject:array toFile:homePath]) { NSLog(@"归档失败"); }else { NSArray *data=[NSKeyedUnarchiver unarchiveObjectWithFile:homePath]; NSLog(@"%@",data); } NSLog(@"Hello, World!"); }
四、复杂的内容归档
使用NSData实例作为归档的存储数据,添加归档的内容(设置key和value),完成归档,将归档内容存入磁盘
解归档步骤:从磁盘读取文件,生成NSData实例,根据data实例创建或初始化归档实例,解归档,根据key访问value的值
NSString *homeDictory=NSHomeDirectory(); NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/usertest.archive"]; NSMutableData *data=[NSMutableData data]; NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; NSArray *nameArray=[NSArray arrayWithObjects:@"andy",@"yang", nil]; [archiver encodeInt:100 forKey:@"age"]; [archiver encodeObject:nameArray forKey:@"names"]; [archiver finishEncoding]; [archiver release]; if ([data writeToFile:homePath atomically:YES]) { NSData *data2=[NSData dataWithContentsOfFile:homePath]; NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:data2]; int age=[unarchiver decodeIntForKey:@"age"]; NSArray *array2=[unarchiver decodeObjectForKey:@"names"]; NSLog(@"%d",age); NSLog(@"%@",array2); [unarchiver release]; } else { NSLog(@"write to file wrong"); } NSLog(@"Hello, World!");
更多内容请参考《【Objective-C基础】自定义对象归档》
结束!
一、数据持久化的方式
1、NSKeyedArchiver--对象归档
2、属性列表化(NSArray、NSDictionary、NSUserDefault)
3、SQlite数据库、CoreData数据库
其中第一、二种方式针对数据量小的数据,第三种方式针对大数据,归档的文件是加密的,属性列表明文的。
归档的形式;
A、对foundation库中对象进行归档
B、自定义对象的归档(需要实现归档协议:NSCoding)
二、最简单归档和解归档的实现代码:
@autoreleasepool { NSString *homeDictory=NSHomeDirectory(); NSArray *array=[NSArray arrayWithObjects:@"one",@"two",@"three",nil]; NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/test.archive"]; if(![NSKeyedArchiver archiveRootObject:array toFile:homePath]) { NSLog(@"归档失败"); }else { NSArray *data=[NSKeyedUnarchiver unarchiveObjectWithFile:homePath]; NSLog(@"%@",data); } NSLog(@"Hello, World!"); }
四、复杂的内容归档
使用NSData实例作为归档的存储数据,添加归档的内容(设置key和value),完成归档,将归档内容存入磁盘
解归档步骤:从磁盘读取文件,生成NSData实例,根据data实例创建或初始化归档实例,解归档,根据key访问value的值
NSString *homeDictory=NSHomeDirectory(); NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/usertest.archive"]; NSMutableData *data=[NSMutableData data]; NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; NSArray *nameArray=[NSArray arrayWithObjects:@"andy",@"yang", nil]; [archiver encodeInt:100 forKey:@"age"]; [archiver encodeObject:nameArray forKey:@"names"]; [archiver finishEncoding]; [archiver release]; if ([data writeToFile:homePath atomically:YES]) { NSData *data2=[NSData dataWithContentsOfFile:homePath]; NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:data2]; int age=[unarchiver decodeIntForKey:@"age"]; NSArray *array2=[unarchiver decodeObjectForKey:@"names"]; NSLog(@"%d",age); NSLog(@"%@",array2); [unarchiver release]; } else { NSLog(@"write to file wrong"); } NSLog(@"Hello, World!");
更多内容请参考《【Objective-C基础】自定义对象归档》
结束!
相关文章推荐
- 【Objective-C基础】自定义对象归档
- IO流对象序列化与反序列化
- Android_非UI:JsonObject + JsonArray
- IHTMLObjectElement
- js图片前端预览之 filereader 和 window.URL.createObjectURL
- iOS开发系列--Objective-C之类和对象
- [精通Objective-C]类,接口,协议与扩展
- js调用java方法的遇到的坑Uncaught TypeError: Object [object Object] has no method
- 【Objective-C基础】委托、非正式协议、正式协议
- 【Objective-C基础】自动释放池
- 【Objective-C基础】NSNumber,NSValue和NSData
- 【Objective-C基础】类别Category
- Objective-C基础】 isEqual ,isEqualToString , == 三者的区别
- 【Objective-C基础】对象初始化
- 【object-c基础】#import,NSLog(),数据类型
- java基础面试题:Object类到底实现了哪些方法
- 【Object-c基础】预定义,条件编译,数组
- 【object-c基础】@interface,@implementation
- Javascript Object对象方法详解
- gm: error while loading shared libraries: libpng15.so.15: cannot open shared object file: No such file or directory