iOS 数据存储

来源:互联网 发布:商品优化是什么意思 编辑:程序博客网 时间:2024/05/22 00:37

一、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会把PreferencesDocuments中的文件备份到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];
0 0
原创粉丝点击