前言
持久化是将程序数据的持久状态和瞬时状态转化的机制,通俗的讲,就是瞬时数据持久化为持久数据。持久化(Persistence),即把数据(如内存中的对象)保存到永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
一、沙盒简介
沙盒(standbox),其原理是通过重定向技术(类似:Linux系统中重定向:系统把输出的数据写入到一个文件中的过程),把程序生成和修改的文件定向到自身文件夹中。在沙盒机制下,每个程序之间的文件夹不能相互访问。iOS系统为了保证系统安全采用的一种保护机制。(Android系统下,App之间可以相互共享数据)
iOS应用程序在安装时,会通过重定向的方式创建属于应用的沙盒文件。应用程序不能直接访问其他应用程序的沙盒文件,当应用程序需要向外部请求或者接收数据时,都需要经过权限认证,否则,无法获取数据。 此规则的一个例外是当应用程序使用公共系统接口访问用户的联系人或音乐等内容时。 在这些情况下,系统框架使用帮助应用程序来处理读取或修改适当数据存储所需的任何与文件相关的操作。
二、沙盒的使用详解
列出了sandbox目录中一些更重要的子目录,并描述了它们的预期用法。 此表还描述了每个子目录的任何其他访问限制,并指出目录的内容是否由iTunes和iCloud备份
在项目中最常用的沙盒目录是Libray,接下来详细介绍一下Library目录下的文件
三、文件,并发和线程安全
由于与文件相关的操作涉及与硬盘交互,因此与大多数其他操作相比较慢,因此iOS和macOS中的大多数与文件相关的接口都考虑了并发性。 有几种技术将异步操作合并到其设计中,而大多数其他技术可以从调度队列或辅助线程安全地执行。 下表出了本文档中讨论的一些关键技术,以及它们是否可以安全地从特定线程或任何线程使用。 有关任何接口功能的特定信息,请参阅该接口的参考文档。
即使使用线程安全接口来操作文件,当多个线程或多个进程尝试对同一文件执行操作时,仍会出现问题。 尽管存在防止多个客户端同时修改文件的安全措施,但这些安全措施并不总能保证对文件的独占访问。 (也不应该尝试阻止其他进程访问共享文件。)要确保代码知道对共享文件所做的更改,请使用文件协调器来管理对这些文件的访问。
##四、沙盒的使用
1.获取沙盒路径方式/**
沙盒路径 方式一:
直接使用系统定义的沙盒路径的方法获取沙盒路径
*/
NSString *sandboxStr = NSHomeDirectory() ;
NSString *tempStr = NSTemporaryDirectory();
NSLog(@"
-----SandBox: %@
---temp%@",sandboxStr,tempStr);
/**
沙盒路径 方式二:
获得沙盒路径方式二采用SearchPath的方式,NSSearchPathForDirectoriesInDomains是一种文件查找方式,查看沙盒的路径,其中NSSearchPathForDirectoriesInDomains方式有三个参数,三个参数的含义分别如下:
参数1:搜索文件夹路径:NSSearchPathDirectory
常用:NSDocumentDirectory、NSLibraryDirectory、NSCachesDirectory
参数2:用户作用域下搜索
参数3:true代表绝对路径(基本上用决定路径),false代表相对路径
*/
NSArray *userNameArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true);
NSArray *localDomain2 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSLocalDomainMask, true);
NSArray *networkNameArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSNetworkDomainMask, true);
NSArray *sysArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSSystemDomainMask, true);
NSArray *allDomains = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSAllDomainsMask, true);
NSLog(@"-----userDocument:%@
----locationMake:%@
----networlMake:%@
-----sysMake:%@
----allDomain:%@
",[userNameArr firstObject],[localDomain2 firstObject],[networkNameArr firstObject],[sysArr firstObject],[allDomains firstObject]);
输出的结果:
-----SandBox: /Users/jack/Library/Developer/CoreSimulator/Devices/9BF127FB-B07B-4B61-995B-C0AF20EACC90/data/Containers/Data/Application/37409917-4796-488E-88ED-12D7DDD2B893
---temp/Users/jack/Library/Developer/CoreSimulator/Devices/9BF127FB-B07B-4B61-995B-C0AF20EACC90/data/Containers/Data/Application/37409917-4796-488E-88ED-12D7DDD2B893/tmp/
-----userDocument:/Users/jack/Library/Developer/CoreSimulator/Devices/9BF127FB-B07B-4B61-995B-C0AF20EACC90/data/Containers/Data/Application/37409917-4796-488E-88ED-12D7DDD2B893/Documents
----locationMake:(null)
----networlMake:(null)
-----sysMake:(null)
----allDomain:/Users/jack/Library/Developer/CoreSimulator/Devices/9BF127FB-B07B-4B61-995B-C0AF20EACC90/data/Containers/Data/Application/37409917-4796-488E-88ED-12D7DDD2B893/Documents
2.沙盒文件
上述打印出来的沙盒路径,通过“command+shift+g”查看沙盒的路径下的组成
总结:
IOS中数据持久化存储在沙盒中存储
沙盒每个路径的功能和作用
沙河路径的获取和创建文件存储到沙盒中
---------------------
作者:Flame_Dream
原文:https://blog.youkuaiyun.com/Future_One/article/details/82891385