一 概述
iOS拥有一套完整的数据安全体系,iOS应用程序只能访问自己的目录,这个目录称为沙箱目录,而应用程序间禁止数据的共享和访问.访问一些特殊的应用时,如联系人应用,必须通过特定的API访问.
二 沙箱目录
沙箱目录是一种数据安全策略,很多系统都使用沙箱设计,实现HTML5 规范的一些浏览器也采用了沙箱的设计.沙箱设计目录设计的原理就是只能允许自己的应用访问目录,而不允许其他的应用访问.在iOS系统中,特有的应用需要特定的API才可以共享数据,而其他的应用之间都不能共享数据.
沙箱的子目录有:Documents Library and tmp
下面分别介绍这三个子目录的用途,场景和访问方式:
1 Documents
该目录用于存储非常大的文件或需要非常频繁更新的数据,能够进行iTunes或iCloud的备份.获取目录位置的代码:
NSArray *documentDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUeserDomainMask,YES);
其中documentDirectory 是只有一个元素的数组,因此还需要使用下面的代码取出一个路径来:
NSString *myDocPath = [documentDirectory objectAtIndex:0];
或者
NSString *myDocPath = [documentDirectory lastObject];\
因为documentDirectory数组只有一个元素,所以取第一个元素和最后一个元素都是一样的,都可以取出Document目录.
2 Library 目录
在Library 目录下面有Preferences 和Caches 目录,其中前者用于保存应用程序的设置数据,后者和Document很相似,可以存放应用程序的数据,用来存储缓存文件.
3 tmp目录
这是临时文件目录,用户可以访问它.它不能够进行iTunes或iCloud的备份.要获取该目录的位置,可以使用如下的代码
NSString *tmpDirectory = NSTemporaryDirectory();
数据持久化的四种方式:
1 属性列表
属性列表文件是一种xml文件,Foundation框架中的数组和字段等都可以于属性列表文件互相转换
2 对象归档
对象归档是一种序列化方式. 为了方便数据传输,先将归档对象序列化为一个文件,然后通过反归档将数据恢复到对象中.归档技术可以实现数据的持久化,不过在大量数据和频繁读写的情况下,就不太适合了.
对一个对象进行完整归档需要满足的条件为:该对象的类必须实现NSCoding协议,而且每个成员变量应该是基本数据类型或者都是实现NSCoding协议的某个类的实例.
3 数据库
SQLite 采用C语言编写,具有可移植性强,可靠性高,小而容易使用的特点.SQLite运行时与使用它的应用程序之间公用相同的进程空间,而不是单独的两个进程.
4 Core Data
Core Data 是苹果为Mac OS X 和iOS 系统应用开发提供的数据持久化技术.他基于高级数据持久化API,器底层最终还是SQLite数据库,二进制文件和内存数据保存,这样开发人员不再关心数据的存储细节问题,不再使用SQL语句,不再面对SQLite的C语言函数.
Core Data 是一种ORM(对象关系映射)技术,ORM是关系数据模型和对象模型类之间的一个纽带.