【OC数据持久化】:沙盒与数据持久化

目录
一、沙盒
 1、沙盒是什么
 2、沙盒下的各个文件夹及其作用
二、数据持久化
 1、数据持久化是什么
 2、数据持久化的几种方式


一、沙盒


1、沙盒是什么

iOS系统会在磁盘上为每个App分配一块独立的存储空间,这块独立的存储空间就是沙盒,说白了沙盒其实就是一个文件夹,用来存储App的应用数据和用户数据。

设计沙盒的目的是为了防止App收集或修改其它App存储的数据,也就是说App只能访问自己沙盒里的数据,不能访问其它沙盒里的数据,从而提高App的安全性。

2、沙盒下的各个文件夹及其作用

沙盒下一共有三个文件夹:Documents、Library、tmp,Library文件夹下又有两个文件夹:Preferences、Caches。

  • 根文件夹
NSLog(@"沙盒根文件夹:%@", NSHomeDirectory());
  • Documents文件夹
NSLog(@"Documents文件夹:%@", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]);

存储什么数据:主要用来存储用户数据,所谓用户数据就是指你希望暴露给用户的数据,换句话说这些数据是由用户新增的,用户也可以对它们进行删除、修改、读取操作。比如一个图片App,用户数据就包含用户从相册获取或者从相机拍摄以供编辑的照片等;又比如一个音视频App,用户数据就包含用户下载以供稍后收听或观看的音视频文件等。

是否会同步:iCloud会同步该文件夹。

数据清除时机:系统不会清除该文件夹里的数据,所以需要我们自己清除,当然App卸载时该文件夹里的数据会被清除掉。

  • Library/Preferences文件夹
NSLog(@"Library/Preferences文件夹:%@", [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"Preferences"]);

存储什么数据:主要用来存储应用数据里的偏好设置数据,不应该把用户数据存储到这里,所谓应用数据就是指你不希望暴露给用户的数据,所谓偏好设置数据就是指缓存数据之外你不希望暴露给用户的数据。比如我们会把用户的用户名和密码存储在这里,以便能够自动登录,但我们通常不会直接操作这个文件夹,而是通过NSUserDefaults来间接地操作这个文件夹。

是否会同步:iCloud会同步该文件夹。

数据清除时机:系统不会清除该文件夹里的数据,所以需要我们自己清除,当然App卸载时该文件夹里的数据会被清除掉。

  • Library/Caches文件夹
NSLog(@"Library/Caches文件夹:%@", [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]);

存储什么数据:主要用来存储应用数据里的缓存数据,不应该把用户数据存储到这里,所谓应用数据就是指你不希望暴露给用户的数据,所谓缓存数据就是指那些用来提高App性能和用户体验的数据,换句话说即便没有缓存数据,App也是能正常运行的,但有了缓存数据,App性能和用户体验会变得更好。比如SDWebImage做的图片磁盘缓存,能提高图片的加载速度;又比如一些App首页缓存下来的数据,就算用户断网了也能看到精美的界面。

是否会同步:iCloud不会同步该文件夹。

数据清除时机:系统会在磁盘内存不足时自动清除该文件夹里的数据,所以我们千万不能把重要的、影响App运行的数据存储在这里,当然我们也需要提供清除缓存的功能,当然App卸载时该文件夹里的数据会被清除掉。

  • tmp文件夹
NSLog(@"tmp文件夹:%@", NSTemporaryDirectory());

存储什么数据:主要用来存储临时数据,所谓临时数据就是指你不需要长时间保留的任何数据。比如我们录了一段音频是aac格式的,应该把它视作临时数据先存储在tmp文件夹下,而把转换后的mp3格式视作用户数据存储在Documents文件夹下。

是否会同步:iCloud不会同步该文件夹。

数据清除时机:系统会在我们杀死App后定期该文件夹里的数据,所以我们千万不能把重要的、影响App运行的数据存储在这里,当然我们在使用完临时数据后最好自己就及时地把它们清理掉,当然App卸载时该文件夹里的数据会被清除掉。


二、数据持久化


1、数据持久化是什么

数据持久化是指我们将App的某些应用数据或用户数据存储到它的沙盒里,以便App在重启之后还能继续访问这些数据。

2、数据持久化的几种方式

  • NSUserDefaults:它主要用来存储一些基本数据类型的数据、系统自带对象类型的数据、自定义对象类型的数据(当然我们要做归档和反归档操作),总得来说这些数据都是小数据量的、并且是偏好设置数据。

  • writeToFile:它主要用来存储一些基本数据类型的数据 + 字符串、数组 + 字典、自定义对象类型的数据(当然我们要做归档和反归档操作),总得来说这些数据也都是小数据量的、并且是用户数据或缓存数据或临时数据;当然它还可以用来存储图片、音频、视频等多媒体文件。

  • SQLite数据库:它主要用来存储一些大数据量的数据,尤其这些数据可能涉及到排序、统计等操作,比如我们的离线答题需求就需要把一份一份的试卷都存储到数据库里,而每一份试卷又由一道一道的题目组成,而每一道题目又由题号、题干、作答内容等很多部分组成,此外我们需要对若干份试卷按时间排序,也需要对试卷的作答人数做统计等。

  • CoreData:它其实就是对SQLite数据库的封装,相对于SQLite数据库来说它最大的特点就是可视化操作和我们不用再写SQL语句了,因此操作起来比较简单,但可视化操作最终还是会被转换成SQL语句去执行,所以它的执行效率肯定比不上直接操作SQLite数据库。

你可能感兴趣的:(【OC数据持久化】:沙盒与数据持久化)