常见的数据存储方式:
- Plist格式文件存储: PropertList属性列表
- NSUserDefaults存储
- 解归档存储: NSKeyedArchiver归档 / NSKeyedUnarchiver解档
- 数据库:SQLite3,基于SQLite3的FMDB,CoreData
- Plist文件
- Plist文件,即属性列表文件。
- 可以存储的数据类型有:Array、Dictionary、String、Bool、Date、Data、Number。
- 常用于存储用户的设置或存储项目中经常用到又不经常修改的数据。
- plist 文件可以只用Xcode直接创建,也可以使用代码创建。
- 不适合存储大量数据,而且只能存储基本数据类型。
- 虽然也能实现增删改查等操作,但由于数据的存取必须是一次性全部操作,所以性能方面并不好
- NSUserDefaults沙盒存储(个人便好存储)
- 应用程序启动后,会在沙盒路径Library->Preferences下默认生成与工程同名的plist文件,该方式存储的数据都将存入该文件当中。
- 常用于存储个人便好设置。
- 这种方式本质是操作plist文件,所以性能方面的考虑同plist数据存储。
- 解归档存储: NSKeyedArchiver归档 / NSKeyedUnarchiver解档
归档(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上;程序运行过程中,或者重新打开程序时,可以通过 解归档(反序列化)还原这些对象。
- plist 与 NSUserDefaults(个人偏好设置)两种类型的储存只适用于系统自带的一些常用类型,而且plist必须拿到文件路径,NSUserDefaults也只能储存应用的主要信息。
- 对于开发中自定义的数据模型的储存,我们可以考虑使用归档储存方案。
- 归档保存数据,文件格式自己可以任意,没有要求 ; 即便设置为常用的数据格式(如:.c .txt .plist 等)要么不能打开,要么打开之后乱码显示。
- 值得注意的是使用归档保存的自定义模型需要实现NSCoding协议下的两个方法。
- 不适合存储大量数据,可以存储自定义的数据模型。
- 虽然归档可以存储自定义的数据结构,但在大批量处理数据时,性能上仍有所欠缺。相对 NSUserDefaults 来说,速度慢些,但是可以保存自定义类型的.
- 数据库:SQLite3,基于SQLite3的FMDB,CoreData
主流使用的DB框架有:
- SQLite3 : SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快。SQLite提供的是一些C函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给SQLite函数,SQLite就会为你操作数据库。一个数据库中的表就算是一个文件,一般是将这个文件放在沙盒Document目录下,文件后缀名一般为db(database)
- FMDB 正式基于 SQLite 开发的一套开源库。使用时,需要自己写一些简单的SQLite语句。
FMDB是基于OC语言对SQlite数据库使用的封装,具有对象化概念(注意这里的对象化概念不是说可以直接存储对象,是指OC语言的基本对象【NSInteger(integer)、浮点型(real)、NSString (text) 、 对象或其他(blol)】,实际数据库存储的类型只有小括号内的四中基本的。对于图片等其他类型的可以转化为二进制存储在数据库中。
- CoreData 是苹果给出的一套基于 SQLite 的数据存储方案;而且不需要自己写任何SQLite语句。该功能依赖于CoreData.framework 框架,该框架已经很好地将数据库表和字段封装成了对象和属性,表之间的一对多、多对多关系则封装成了对象之间的包含关系。
- SQLite.swift :非常好用的Swift封装的框架,轻量级。
- WCDB.swift:是一个易用、高效、完整的移动数据库框架,它基于 SQLite 和 SQLCipher 开发。它是腾讯开发的,微信app中使用的框架。
【基础概念】
- 沙盒:其实质就是在iOS系统下,每个应用在内存中所对应的存储空间。
- 每个iOS应用都有应用沙盒(文件系统目录),与其他文件系统隔离;
- 每个沙盒之间相互隔离,而且不能相互访问(越狱例外)
- 各个应用的沙盒是相互独立的,在系统内存消耗过高时,系统会收到内存警告并自动将一些应用退出。这就保证了系统的数据的安全性及稳定性。
- 沙盒目录
- Documents:应用程序在运行时生成的一些需要长久保存的数据。这个目录用于存储用户数据或其它应该定期备份的信息。
- Library:
Library—>Caches:存储应用程序网络请求的数据信息(音视频/图片等的缓存)。此目录下的数据不会自动删除,需要手动清除数据。主要用于保存应用在运行时生成的需要长期使用的数据,一般用于存储体积较大数据
Library—>Preferences:设置应用的一些功能会在该目录中查找相应设置的信息,该目录由系统自动管理,通常用来存储一些基本应用配置信息,例如账号密码,自动登录等。(应用中用NSUserDefaults保存的数据,就在该目录里与应用同名的plist文件中)
- tmp: 保存应用运行时产生的一些临时数据;应用程序退出、系统空间不够、手机重启等情况下都会自动清除该目录的数据。
- SystemData 系统产生的缓存
推荐:https://blog.csdn.net/kyl282889543/article/details/100198041