==============================*************================================
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:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码
定义Possession:
@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];