简介
在开发通常需要我们把一些数据存储在本地,这篇我们来介绍iOS中数据持久化得方法。
1.属性列表
2.对象归档
3.偏好设置
4.嵌入式数据库(SQLite3)
5.苹果公司提供的持久化工具 Core Data
以下我们围绕这4种方式逐一介绍,在上一遍种我们介绍了“沙盒”和文件管理的基础知识,我们将以上一篇为基础进行介绍后面内容
1.属性列表
属性列表(plist),指定应用的配置比如tabbar的状态,黑白名单,网络请求ATS等等。我们可以通过Xcode或者Property List Editor手动编辑。并且只要字典或数组包含特定可序列化对象就可以将NSDictionary和NSArray实例写入属性列表或者创建。
序列化对象(serialized object)是指可以被转换为字节流以便于存储到文件中或者通过网络进行传输的对象。
可以被序列化得Objective-C类:
NSArray;
NSMutableArray;
NSDictionary;
NSMutableDictionary;
NSData;
NSMutableData;
NSString;
NSMutableString;
NSNumber;
NSDate;
我们按照上一篇中的方法获取需要存取的目录然后执行保存和读取的操作
//获取路径
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *fileName = [path stringByAppendingPathComponent:@"test.plist"];
//保存数组
NSArray *array = @[@"Gavin", @"Alice", @"Lucy"];
[array writeToFile:fileName atomically:YES];
//读取信息
NSArray *result = [NSArray arrayWithContentsOfFile:fileName];
atomically:参数让该方法将数据写入辅助文件,而不是写入指定位置。成功写入该文件之后,辅助文件将被复制到第一个参数指定的位置,这是更安全的写入文件的方法,如果应用在保存期间崩溃,则现有文件不会被破坏。
属性列表中只能将一小部分对象存储,我们来看看比较强大的方法。
2.对象归档
我们先来介绍一些基础的概念:
归档(archiving):是另一种形式的序列化,它可以在任何对象进行序列化,编写用于保存数据,可以轻松的将复杂的对象写入文件,然后再从中读取他们。
实现对象归档,都应该遵循NSCoding协议同时还应该遵循NSCopying协议,NSCopying可以允许复制对象,由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。
NSCoding协议
NSCoding协议声明了两个方法,也就是归档和解码。归档将一个对象编码到归档中,解码对归档解码来创建一个新对象。我们通过下面的例子来了解
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assgin) NSInteger age;
@end
//归档
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
//解档
- (id)initWithCoder:(NSCoder *)aDecoder {
if ([super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecod