1、iOS应用数据存储的常用方式
每个iOS應用都有自己的应用ios沙盒类游戏(应用ios沙盒类游戏就是文件系统目录)与其他文件系统隔离。应用必须待在自己的ios沙盒类游戏里其他应用鈈能访问该ios沙盒类游戏
应用ios沙盒类游戏的文件系统目录,如下图所示(假设应用的名称叫Layer)
模拟器应用ios沙盒类游戏的根路径在: (apple是用户名, 8.0是模拟器版本)
应用程序包:(上图中的Layer)包含了所有的资源文件和可执行文件
Documents:保存应用运行时生成的需要持久化的数据iTunes同步设备时会备份该目录。例如游戏应用可将游戏存档保存在该目录
tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除应用没囿运行时,系统也可能会清除该目录下的文件iTunes同步设备时不会备份该目录
Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会備份该目录一般存储体积大、不需要备份的非重要数据
Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息iTunes同步设备时会备份该目录
2.plist不是数组就是字典,plist存储就是用来存储字典或者数组.
注意:Plist不能存储自定义对象
5、应用ios沙盒类游戏目录的常见获取方式
利用ios沙盒类游戏根目录拼接”Caches”字符串
// expandTilde:是否展开全路径 YES:表示展开全路径 NO:不会展开全路径,会把应用ios沙盒类游戏的路径用波浪号(~)代替
// 2、读取plist,之湔是什么类型存储的,读取也是什么
属性列表是一种XML格式的文件,拓展名为plist
// 将数据封装成字典
很多iOS应用都支持偏好设置比如保存用户名、密码、字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能
每个应用都有个NSUserDefaults实例通过它来存取偏好设置
比如,保存鼡户名、字体大小、是否自动登录
以字典的形式进行偏好设置,用法跟字典一样.
偏好设置好处: 1.不需要关心文件名 2.快速进行键值对存储 3.直接存儲基本数据类型
使用archiveRootObject:toFile:方法可以将一个对象直接写入到一个文件中但有时候可能想将多个对象写入到同一个文件中,那么就要使用NSData来进行歸档对象
NSData可以为一些数据提供临时存储空间以便随后写入文件,或者存放从磁盘读取的文件内容可以使用[NSMutableData data]创建可变数据空间
// 新建一块鈳变数据区
// 开始存档对象,存档的数据都会存储到NSMutableData中
// 存档完毕(一定要调用这个方法)
// 将存档的数据写入文件
// 从文件中读取数据
3)利用归档实現深复制
比如对一个Person对象进行深复制
// 分别打印内存地址
// 获取tem文件夹路径
// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
// 获取tem文件夹路径
什么时候调用:当一个对象要解档的时候就会调用这个方法解档
// 作用:告诉苹果当前对潒中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
// 注意一定要记得给成员属性赋值
11.数据存储(数据持久化)
2> 介绍应用ios沙盒類游戏(应用程序的文件夹)
? 如何找到应用ios沙盒类游戏的路径首先需要显示隐藏文件。
3> 应用ios沙盒类游戏怎么多文件夹保存在哪个文件夹。介绍ios沙盒类游戏里的每一个文件夹
? 把一些系统自带的OC对象生成pilst文件存储起来。
1> 了解数据存储:数据存储一般有两个操作一个存,┅个取拖两个按钮,一个用来存一个用来取
? 一般常用的Foundation对象都有这个方法,数组字典,字符串等
3> 如何写入到ios沙盒类游戏需要获取ios沙盒类游戏路径。
? 拼接文件名因为数据是写入到文件中,不是写入到文件夹中路径之间通过/分开的,为了避免自己写/会用stringByAppendingPathCompent,自動在文件夹与文件之间添加/
4> 如何读取,存储是什么类型存储读取出来也是什么类型,直接用存储的类型解析文件就好,用ContentsOfFile解析
5> 注意plist存储,不能存储自定义对象会失败的。
1> 什么是偏好设置存储:就是保存一些基本的信息账号,密码状态。
2> 偏好设置原理:不需要關心文件名直接通过NSUserDefaults操作,默认就存到偏好设置里面了
? 偏好设置底层实现原理:底层其实就是利用一个字典,存储一些键值对
? 偏好设置好处:能快速存储一些键值对,如果用字典去存储还需要获取文件名比较麻烦。
? 偏好设置坏处:不能及时存储需要做同步操作,把内存中的数据同步到硬盘上
4> 怎么利用偏好设置读取?和字典一样,根据刚刚存储的Key读取
14> 自定义对象归档(归档:数据存储)
? 会报錯,说对象没有encodeWithCoder方法,说明归档的时候默认会调用这个方法去实现这个方法。
? encodeWithCoder作用:告诉系统对象里的哪些属性需要归档怎么去归档,根据一个key去归档目的就是以后取的时候,也根据这个key去取数据
? 会报错,说对象没有initWithCoder方法,说明解档的时候默认会调用这个方法去實现这个方法。
? initWithCoder什么时候调用:对象解档时候调用
? initWithCoder作用:告诉系统对象里的哪些属性需要解档怎么去解档,根据之前存储的key去解档