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

IOS 本地数据存储小结

2014-07-08 00:13 351 查看
==============================*************================================

iphone的沙盒中有四个文件夹:documents,tmp,app,Library

documents :用于存储用户的基本信息、备份信息等。

Library : Library包含两个文件夹

Preferences和Caches

Preferences里存储的是程序的设置文件

Caches存储的是每次程序启动时需要的信息。

AppName.app:存储程序的代码。注:运行时不能更改文件夹下的内容,否则将导致程序无法正常启动。

tmp :用于存储程序运行时产生的临时信息,程序退出时自动删除。

===============具体实现代码=============

Write写入:

//获取文件的保存路径 -

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

NSString *str =[paths objectAtIndex:0];

//生成存入路径中的文件

NSString
*string=[documentDirectory stringByAppendingPathComponent:str];

//往文件中写数据

[data writeToFile:string atomically:YES];

//从文件中读取数据

NSData *data = [NSData dataWithContentsOfFile:string options:str error:nil];

====================分割线======================

NSUserDefaults用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果要存储其他类型,则需要转换为前面的类型,才能用NSUserDefaults存储。具体实现为:

保存数据:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];

NSString *name =@”default string“;

[defaults setObject:firstName forKey:@"name"];

UIImage *image=[[UIImage alloc]initWithContentsOfFile:@"photo.jpg"];

NSData *imageData = UIImageJPEGRepresentation(image, 100);

[defaults synchronize];


读取数据:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];

NSString *name = [defaults objectForKey:@"name"];//根据键值取出name

NSData *imageData = [defaults dataForKey:@"image"];

UIImage *Image = [UIImage imageWithData:imageData];//NSData转换为UIImage


===================分割线====================

NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码

定义[b]Possession:

[/b]

@interface Possession:NSObject<NSCoding>{//遵守NSCoding协议

NSString *name;



}

@implementation Possession

-(void)encodeWithCoder:(NSCoder
*)aCoder{


[aCoder encodeObject:name
forKey:@"name"];



}



-(void)initWithCoder:(NSCoder *)aDecoder{

name=[[aDeCoder decodeObjectforKey:@"name"]
retain];



}

归档:

如果对Possession对象allPossession归档保存,只需要NSCoder子类NSKeyedArchiver的方法archiveRootObject:toFile: 即可。

NSString *path = [self possessionArchivePath];

[NSKeyedArchiver archiveRootObject:allPossessions toFile: path ]

解档:

同样调用NSCoder子类NSKeyedArchiver的方法unarchiveRootObject:toFile:

allPossessions = [[NSKeyedUnarchiver unarchiveObjectWithFile:path] retain];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: