本文由我们团队的王瑞华童鞋撰写。
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。在iOS开发中,有很多种数据持久化方案,本文主要介绍 plist文件,NSKeyedArchiver,SQLite3,NSUserDefaults。
iOS的沙盒模型
iOS最为人所熟知的就是其沙盒模型,一个App的读写权限只限于自己的沙盒目录中。沙盒模型的好处有哪些?1. 安全,别的app无法修改你的程序。2. 保护隐私,别人app无法读取你的程序。3.便于系统管理,一个app产生的内容都包含在自己的沙盒中,便于系统管理。
iOS 沙盒目录结构如下
1 2 3 4 5 6 |
App Bundle, 如xxx.app 其实是一个目录,里面包含app二进制数据以及资源文件 Documents, 存放程序产生的文档数据 Library Caches Preferences tmp,临时文件目录,目前我所知道的是下载文件会在此文件暂存,完成后进行处理 |
如果我们想获取上面某个目录的路径,应该如何实现呢?
对于最常用的Documents目录,iTunes同步该应用时会同步该文件夹内容,适合存放用户重要数据
1 2 |
NSString *searchPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSLog(@"%@", searchPath); |
Library/Caches:iTunes不会同步该文件夹
Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。
1 2 |
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSLog(@"%@", path); |
tmp:此目录适合保存应用中的一些临时文件,用完就删除。
1 2 |
NSString *path = NSTemporaryDirectory(); NSLog(@"%@", path); |
NSFileManager
在实际项目开发中,我们一般会创建一个工具类来对app的文件进行管理。
NSFileManager 提供一个类方法获得一个单例。
1 |
+ (NSFileManager *)defaultManager |
下面是NSFileManager的常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/*新建目录,createIntermediates这个参数一般为YES, *表示如果目录路径中间的某个目录不存在则创建之, *如果是NO的话,则要保证所创建目录的父目录都必须已经存在 */ - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error; // 获取目录下的所有文件 - (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error; - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; - (BOOL)linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error; |
plist 文件
plist文件的实质为XML文件,很容易查看到文件数据类型。可以被plist文件序列话的类型只有以下几种:
- NSArray, NSMutableArray
- NSDictionary, NSMutableDictionary
- NSData, NSMutableData
- NSString, NSMutableString
- NSNumber
- NSDate
而在实际的项目中,我们一般是将NSDictionary或NSArray的对象保存到文件或者从文件读取成对象。NSDictionary和NSArray会直接写成plist文件。
1 |
- (储模型可以是关系模型、XML、二进制流等。在iOS开发中,有很多种数据持久化方案,本文主要介绍 plist文件,NSKeyedArchiver,SQLite3,NSUserDefaults。
iOS的沙盒模型iOS最为人所熟知的就是其沙盒模型,一个App的读写权限只限于自己的沙盒目录中。沙盒模型的好处有哪些?1. 安全,别的app无法修改你的程序。2. 保护隐私,别人app无法读取你的程序。3.便于系统管理,一个app产生的内容都包含在自己的沙盒中,便于系统管理。
如果我们想获取上面某个目录的路径,应该如何实现呢? 对于最常用的Documents目录,iTunes同步该应用时会同步该文件夹内容,适合存放用户重要数据
Library/Caches:iTunes不会同步该文件夹 Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。
tmp:此目录适合保存应用中的一些临时文件,用完就删除。
NSFileManager在实际项目开发中,我们一般会创建一个工具类来对app的文件进行管理。
下面是NSFileManager的常用方法
plist 文件plist文件的实质为XML文件,很容易查看到文件数据类型。可以被plist文件序列话的类型只有以下几种:
而在实际的项目中,我们一般是将NSDictionary或NSArray的对象保存到文件或者从文件读取成对象。NSDictionary和NSArray会直接写成plist文件。
|