【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数据库。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容