/*
数据持久化是通过文件将数据存储在磁盘上
四中数据持久化方式:
1.属性列表(Property List)
2.对象归档
3.SQLite
4.CoreDate
对比:
1.属性列表、对象归档适合小数据量存储和查询操作
2.SQLite、CoreDate适合大数据量存储和查询操作
对象归档:
对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径
读取文件的内容(也称为接档,反序列化)。
(对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看)
对象归档有两种方式:1:对foundation中对象进行归档 2:自定义对象归档
*/
/*
自定义内容归档
归档:
使用NSData实例作为归档的存储数据
添加归档的内容---使用键值对
完成归档
解归档:
从磁盘读取文件,生成NSData实例
根据NSData实例和初始化解归档实例
解归档,根据key访问value
*/
#import <UIKit/UIKit.h>
@interface MainViewController : UIViewController
@end
MainViewController.m
#import "MainViewController.h"
@interface MainViewController ()
@end
@implementation MainViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//获取根目录
NSString *homeDirectory=NSHomeDirectory();
NSString *path=[homeDirectory stringByAppendingFormat:@"test.archiver"];
NSMutableData *data=[[NSMutableData alloc]init];
NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeFloat:10086 forKey:@"TEL"];
[archiver encodeObject:@"Tome" forKey:@"name"];
[archiver finishEncoding];//结束添加对象到data
[archiver release];
[data writeToFile:path atomically:YES];//将data写到文件中保存在磁盘上
//读取数据
NSData *contentData=[NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:contentData];
float tel=[unarchiver decodeFloatForKey:@"TEL"];
NSString *name=[unarchiver decodeObjectForKey:@"name"];
NSLog(@"float:%f,name:%@",tel,name);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end