你的位置:首页 > 操作系统

[操作系统]iOS 初级数据持久化


数据持久化

什么是数据持久化?

数据的永久存储

为什么要做数据持久化:;存储在内存中的数据,程序关闭,内存释放,数据丢失,这种数据是临时的

数据持久化的本质:数据保存成文件,存储到程序的沙盒中

 

一、沙盒机制

每个应用程序位于文件系统的严格限制部分

每个应用程序只能在为该程序创建的文件系统中读取文件

每个应用程序在iOS系统内都放在了统一的文件夹目录下

沙盒的本质就是一个文件夹,名字是随机分配的,按照UUID标示符标记分配的

沙盒路径的位置

1、通过Finder查找程序沙盒相对路径

~/Library/Application Support/iPhone Simulator 





常见问题

模拟器路径内有可能包含多个系统版本的路径

iPhone5及以前版本 32

iPhone5s 64

 

沙盒构成

Document   存储用户数据,需要备份的信息

Library/Caches  存储缓存文件,程序专用的支持文件

Library/Preferences 存储应用程序的偏好设置文件

.app     程序包(iOS时, app不存储在沙河中,有单独的文件夹存储所有程序的app包)

tmp      存储临时文件。比如:下载的zip包,解压后的再删除

 

通过代码查找程序沙盒相对路径

获取沙盒目录路径的方法

NSHomeDirectory              沙盒主路径

NSDocumentDirectory        Documents文件夹

NSLibraryDirectory             Library 文件夹

NSCachesDiectory              Caches 文件夹

NSTemporaryDirectory        temp文件夹

 

 每个应用程序文件夹内的app文件路径的获取

路径打印结果如下:

 

二、简单对象写入文件

文件存储的相对目录

字符串对象写入文件

 

1、字符串对象写入文件 

2、数组对象写入文件

3、字典对象写入文件

4、二进制对象写入文件

 

根据构造出的路径我们通过查找就可以在文件内看到生成的相应文件,如下:

 

数组和字典中的对象类型必须是上述四种

 

三、使用NSFileManager来管理文件

 

NSFileManager,文件管理,使用detaultManager,创建单例对象

可以创建文件夹

可以创建、移动、复制、删除文件

可以判断文件是否存在

具体步骤如下:

四、复杂对象写入文件

   

什么是复杂对象

1、在Foundation框架内不存在的数据类

2、无法在程序内通过writeToFile类型的方法写入到文件内

3、复杂对象至少包含一个实例对象

复杂对象怎么进行数据持久化,这就涉及到归档和反归档

复杂对象无法通过writeToFile:方法进行数据持久化,只能通过将复杂对象转换为NSData,通过writeToFile:进行数据持久化

通过归档,将复杂对象转换为NSData;通过反归档,将NSData转换为复杂对象

复杂对象写入文件时要遵守NSCoding 协议

 

例如我们建立一个Person类,使其接受NSCoding协议,同时创建一些Person属性

 

 

在对复杂对象进行归档时,执行下面方法

 

在对复杂对象反归档时,执行下面的方法

 

复杂对象写入文件(归档和反归档)