曾经的曾今,曾今的曾经,任时光荏苒,莫回首,把握当下,希望在明朝
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。一般数据持久化对象的基本操作有:保存、更新、删除、查询等。
在IOS中,数据持久化一般为以下4种:属性列表、对象归档、SQLite和Core Data。
这里先介绍一下沙盒机制,下次再讲解数据持久化。
IOS有一套自己特有的数据安全体系,称为沙盒机制。每个App只能访问自己的目录,这个目录称为沙盒目录。沙箱目录是一种数据安全策略,它的设计原理就是只能允许自己的应用访问目录,而不允许其他的应用访问。在Android平台中,我们通过Content Provider技术将数据共享给其他应用。而在iOS系统中,特有的应用(联系人等)需要特定的API才可以共享数据,而其他的应用之间都不能共享数据。
在模拟器中,沙盒目录为:/Users/[用户名]/Library/Application Support/iPhone Simulator/6.1/Applications/[应用程序ID]/
不过我实际开发时,模拟器路径为:Users/[用户名]/Library/Developer/CoreSimulator/Devices/[模拟器设备ID]/data/Containers/Data/Application/[应用程序ID]/
在真机中,沙盒目录为:/var/mobile/Applications/[应用程序ID]/
其中应用程序ID,是安装时系统自动分配的。
1.目录介绍:
每个app的沙盒目录会有以下三个子目录:Documents、Library、tmp
·Documents目录:该目录用于存储非常大的文件或需要非常频繁更新的数据,如数据库。能够进行iTunes或iCloud的备份。苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下。我们可以在MAC上通过iTunes访问documents目录。
·Library目录:在Library目录下面有Preferences和Caches目录。
Preferences:用于存放应用程序的偏好设置文件,如程序的默认设置或其它状态信息,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录。(不应该直接创建偏好设置文件,一般使用NSUserDefaults类来取得和设置应用程序的偏好)
Caches:与Documents很相似,可以存放应用程序的数据,用来存储缓存文件(可重新生成或重新下载的文件),iTunes不会备份此目录,此目录下文件也不会在应用退出删除。可用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。
·tmp目录:临时文件目录,用户可以访问它。它不能够进行iTunes或iCloud的备份。应用程序重启时可能会清空tmp目录。我们使用tmp存放临时创建的文件时,使用完毕后建议删除,避免占用用户设备空间。
2.获取目录:
·沙盒根目录:
NSString *home =NSHomeDirectory();
·Documents目录:
//利用NSSearchPathForDirectoriesInDomains函数, NSUserDomainMask 代表从用户文件夹下找, YES 代表展开路径中的波浪字符“~”
NSArray *documentDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// 在iOS中,只有一个目录跟传入的参数匹配,所以这个集合里面只有一个元素
NSString *documents = [documentDirectory objectAtIndex:0];//或 [documentDirectory lastObject];
·tmp目录:
NSString *tmp =NSTemporaryDirectory();
·Library/Caches目录:
NSArray *cacheDirectory = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [cacheDirectory objectAtIndex:0];//或 [cacheDirectory lastObject];
扩展:
Swift:
//获取沙盒根目录
var homeDir = NSHomeDirectory()//获取Documents目录
var documentsPaths:NSArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var documentsDic:String = documentsPaths.objectAtIndex(0) as String//获取tmp目录
var tmpDir = NSTemporaryDirectory()//获取Cache目录
var cachesPaths:NSArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var cacheDic:String = cachesPaths.objectAtIndex(0) as String
js(codova):
//获取Documents目录
var documentsDir = cordova.file.documentsDirectory;//获取tmp目录
var tmpDir = cordova.file.tempDirectory;//获取Cache目录
var cachesDir = cordova.file.cacheDirectory;