一、plist存储
1.获取Documents的路径,有两种方式:
<1>
NSString *home = NSHomeDirectory(); // 获取应用程序沙盒目录
// 获取到根目录后,设置路径
NSString *path = [home stringByAppendingString:@"/Documents"];
NSString *path = [home stringByAppendingPathComponent:@"Documents"];
NSUserDomainMask 表示在在用户目录下搜索,YES代表用户目录的~(主目录),NSDocumentDirectory 表示查找Document文件夹;
<2>
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
2.写入到文件中
NSArray *arr;
[arr writeToFile:path atomically:YES];
NSDictionary *dict;
[dict writeToFile:path atomically:YES];
plist只能存储系统自带的一些常规的类,也就是有writeToFile方法的对象才可以使用plist保存数据;(例如:字符串、字典、数据、NSNumber、NSData…)自定义对象不能保存到plist中;
二、Preferences
偏好设置是专门用来保存应用程序的配置信息的,一般情况不要在偏好设置中保存其它数据;利用系统的偏好设置来存储数据,默认存储在Preferences文件夹下面;偏好设置会将所有的数据保存到同一个文件中;
存取步骤:
1.获取NSUserDefaults对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
2.保存数据
[defaults setObject:@"ccflying" forKey:@"name"];
[defaults setInteger:24 forKey:@"age"];
此操作不会立即保存数据到文件中,会在将来的某一个时间点自动将数据保存到Preferences文件夹下面 。
[defaults synchronize]; // 使NSUserDefaults立即保存数据
3.使用NSUserDefaults读取数据
[defaults objectForKey:@"name"];
三、NSKeyedArchiver 归档(NSCoding)
如果想将一个自定义对象保存到文件中,该对象必须实现NSCoding协议;
NSCoding有两个重要的方法:
1.存储
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
// 当将一个自定义对象保存到文件的时候就会调用该方法,在该方法中实现具体的数据存储;
2.读取
-(id)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super init]){
}
return self;
}
// 当从文件中读取一个对象的时候就会调用此方法,在该方法中实现具体的数据的读取;
3.使用NSKeyedArchiver / NSKeyedUnarchiver存取对象
[NSKeyedArchiver archiveRootObject:p toFile:path]; // 存取数据
[NSKeyedUnarchiver unarchiveObjectWithFile:path]; // 读取数据
iOS会把Preferences和Documents中的文件备份到iTunes;
tmp文件夹下的东西随时可能会被删除掉,而caches则不会;
四、文件解压缩
1.解压
NSString filepath;
NSString caches;
[NSZipArchive unzipFileAtPath:filepath toDestination:caches];
// 该操作比较耗时
2.压缩
NSArray *pngs = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:nil]; // 获取图片数组
NSString *path; // .../pngs.zip
[NSZipArchive createZipFileAtPath:path withFilesAtPaths:pngs];