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 封装的数据库工具。

posted @ 2021-01-20 09:50  ebamboo  阅读(114)  评论(0编辑  收藏  举报