iOS数据持久化

2020-04-09  本文已影响0人  一杯清茶一片雪

本地数据存储有哪几种方式?如何实现复杂对象的存储?

plist文件

  1. 属性表(property list)是Cocoa环境中用来表示或保存各种信息的标准数据形式。它可以将数组或词典等对象的结构表现为字符串或二进制形式来保存在文件中。
    属性表ASCII码、XML、二进制三种格式。
    常用xml格式文件,后缀为.plist。

  2. plist文件保存及共享和程序的内部实现关系较弱的抽象数据,如应用的环境变量值。(归档的主要目的是在程序内部保存和还原对象,因此并不适合用来保存与具体的类关联较弱的信息。)

  3. Plist文件特点(先将Xcode创建plist文件,再通过创建好的plist文件介绍plist文件特点)
    1). Plist文件的根路径只能是数组和字典(Plist文件只能持久化数组和字典对象)
    2). Plist文件的子路径只能是NSString, NSNumber, NSData, NSDate, NSBoolean, NSArray, NSDictionary类型对象

//将plist文件读取到数组中(类方法)
+(id)arrayWithContentsOfFile:(NSString *)path;
//将plist文件读取到字典中(类方法)
+(id)dictionaryWithContentsOfFile:(NSString *)path

归档

归档——对象转为二进制数据保存在文件中。
解档——二进制数据读出恢复成对象。
要使用对象归档,对象必须遵守NSCoding协议,并实现协议中的两个方法:
-(void)encodeWithCoder:(NSCoder *)encoder;
-(void)initWithCoder:(NSCoder *)encoder;

NSUserDefault

  1. NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名、密码之类的,使用NSUserDefaults是首选。
  2. NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.

(一)、存储数据
// 保存用户名, 下次自动填充用户名
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setValue:_usernameTextField.text forKey:@"SaveUserName"];
// 同步到文件中
[ud synchronize];
(二)、读取数据
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *username = [ud valueForKey:@"SaveUserName"];

SQlite

SQLite是一个开源的嵌入式关系数据库,可移植性好,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。 嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。
FMDB是一个不错的数据库管理框架。

文件

Write写入方式,永久保存在磁盘中,只支持NSString、NSData、NSArray、NSDictionary。

//文件的路径
NSString *path = [NSString stringWithFormat:@"%@/file.text", NSHomeDirectory()];
//实例化NSFileManager的单例对象
NSFileManager *fileManager = [NSFileManager defaultManager];
//创建文件
[fileManager createFileAtPath:path contents:nil attributes:nil];
//实例化NSFileHandle对象
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:path];
// 写入数据
NSString *string = @"jin tian tian qi zhen bu cuo";
NSData *dataFromString = [string dataUsingEncoding:NSUTF8StringEncoding];
[fileHandle writeData:dataFromString];
// 读取数据
//设置偏移量为开始位置
[fileHandle seekToFileOffset:0];
NSData *dataAll = [fileHandle readDataToEndOfFile];
NSString *stringFromdataAll = [[NSString alloc]initWithData:dataAll encoding:NSUTF8StringEncoding];

CoreData

不是数据库,核心思想是托管对象,只是经常使用的存储文件是SQLite,还可以用XML、二进制等。
Core Data本质上是使用SQLite保存数据,但是它不需要编写任何SQL语句。
要使用Core Data,需要在Xcode中的数据模型编辑器中设计好各个实体以及定义好他们的属性和关系。

上一篇下一篇

猜你喜欢

热点阅读