iOS-数据持久化
iOS应用程序只能访问自己的目录,这个目录称为沙箱目录
Documents、Library和tmp都是沙箱目录的子目录,其目录结构如下所示。
├── Documents
│ └── NotesList.sqlite3 ├──Library
│ ├── Caches
│ └── Preferences ├── tmp
└── PresentationLayer.app
1. Documents目录
该目录用于存储非常大的文件或需要非常频繁更新的数据,能够进行 iTunes或 iCloud的备份。2. Library目录
在 Library目录下面有 Preferences和 Caches目录,其中前者用于存放应用程序的设置数据,后者与 Documents很 相似,可以存放应用程序的数据,用来存储缓存文件。3. tmp目录
这是临时文件目录,用户可以访问它。它不能够进行iTunes或iCloud的备份。
持久化方式
持久化方式就是数据存取方式。iOS支持本地存储和云端存储,本章主要介绍本地存储,主要涉及如下4种机制。
属性列表。集合对象可以读写到属性列表文件中。
对象归档。对象状态可以保存到归档文件中。
SQLite数据库。SQLite是一个开源嵌入式关系型数据库。
Core Data。它是一种对象关系映射技术(ORM),本质上也是通过SQLite存储的。
采用什么技术,要看具体实际情况而定。属性列表文件和对象归档一般用于存储少量数据。属性列表文件的 访问要比对象归档的访问简单,Foundation框架集合对象都有对应的方法读写属性列表文件,而对象归档是借助NSData实现的,使用起来比较麻烦。SQLite数据库和Core Data一般用于有几个简单表关系的大量数据的情况。如 果是复杂表关系而且数据量很大,应该考虑把数据放在远程云服务器中。
属性列表
属性列表文件是一种XML文件,Foundation框架中的数组和字典等都可以与属性列表文件互相转换
对象归档
对象归档是一种序列化方式。为了便于数据传输,先将归档对象序列化为一个文件,然后再通过反归档将数据恢复到对象中。归档技术可以实现数据的持久化,不过在大量数据和频繁读写的情况下,它就不太合适了。对一个对象进行完整归档需要满足的条件为:该对象的类必须实现NSCoding协议,而且每个成员变量应该 是基本数据类型或都是实现NSCoding协议的某个类的实例。
使用 SQLite 数据库