概论
所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案:
plist文件(属性列表)
preference(偏好设置)
NSKeyedArchiver(归档)
SQLite 3
CoreData
沙盒
在介绍各种存储方法之前,有必要说明以下沙盒机制。iOS程序默认情况下只能访问程序自己的目录,这个目录被称为“沙盒”。
1.结构
既然沙盒就是一个文件夹,那就看看里面有什么吧。沙盒的目录结构如下:
- "应用程序包"
- Documents
- Library
- Caches
- Preferences
- tmp
2.目录特性
虽然沙盒中有这么多文件夹,但是没有文件夹都不尽相同,都有各自的特性。所以在选择存放目录时,一定要认真选择适合的目录。
"应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。
- NSString *path = [[NSBundle mainBundle] bundlePath];
- NSLog(@"%@", path);
Documents: 最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。
- NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
- NSLog(@"%@", path);
Library/Caches: iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。
- NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
- NSLog(@"%@", path);
Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。
- tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。
- NSString *path = NSTemporaryDirectory();
- NSLog(@"%@", path);
plist文件
plist文件是将某些特定的类,通过XML文件的方式保存在目录中。
可以被序列化的类型只有如下几种:
- NSArray;
- NSMutableArray;
- NSDictionary;
- NSMutableDictionary;
- NSData;
- NSMutableData;
- NSString;
- NSMutableString;
- NSNumber;
- NSDate;
1.获得文件路径
- NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
- NSString *fileName = [path stringByAppendingPathComponent:@"123.plist"];
2.存储
- NSArray *array = @[@"123", @"456", @"789"];
- [array writeToFile:fileName atomically:YES];
3.读取
- NSArray *result = [NSArray arrayWithContentsOfFile:fileName];
- NSLog(@"%@", result);
4.注意
只有以上列出的类型才能使用plist文件存储。
存储时使用writeToFile: atomically:方法。 其中atomically表示是否需要先写入一个辅助文件,再把辅助文件拷贝到目标文件地址。这是更安全的写入文件方法,一般都写YES。
读取时使用arrayWithContentsOfFile:方法。
Preference
1.使用方法