iOS 数据持久化
一、沙盒路径
每个iOS应用有且仅有一个独立的存储空间,该区域称为沙盒;每个iOS应用只能访问自己的沙盒数据不能访问其他应用的沙盒;
二、简单数据的存储 Property List
1、NSUserDefaults
默认路径为 Library/Preferences/Bundle Identifier 加后缀 .plist
文件格式为 .plist
存储常见数据类型、不能存储自定义数据
取出的数据都是不可变的
写入
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"male"];
[[NSUserDefaults standardUserDefaults] setObject:@"xiaoming" forKey:@"name"];
读出
[[NSUserDefaults standardUserDefaults] boolForKey:@"male"];
[[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
2、自定义存储路径的Property List
写入
NSString *filePath = [cachePath stringByAppendingPathComponent:@"testPlist.plist"];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"ran" forKey:@"name"];
[dict setObject:@"18" forKey:@"age"];
[dict writeToFile:filePath atomically:YES];
读出
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
三、归档和解档(包含自定义对象的存储)
1、自定义类型实现 NSCoding
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
_age = [coder decodeIntegerForKey:@"age"];
_name = [coder decodeObjectForKey:@"name"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeInteger:_age forKey:@"age"];
[coder encodeObject:_name forKey:@"name"];
}
2、NSKeyedArchiver 和 NSKeyedUnarchiver
NSKeyedArchiver 和 NSKeyedUnarchiver 可以对 Foundation 对象和实现 NSCoding 的对象进行归档和解档;
归档
BOOL success = [NSKeyedArchiver archiveRootObject:<#可归档的对象#> toFile:path];
解档
id object = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
四、SQLite 轻量级数据库
SQLite 是一个轻量级的关系型数据库,应用可以通过它直接在用户设备上存储管理很多本地数据。
FMDB、WCDB 是常见的对 SQLite 封装的数据库工具。