iOS应用都被限制在“沙盒”中,“沙盒”至关于一个加了仅主人可见权限的文件夹,苹果对沙盒有如下几条限制。ios

(1)、应用程序能够在本身的沙盒里运做,可是不能访问任何其余应用程序的沙盒。缓存

(2)、应用程序间不能共享数据,沙盒里的文件不能被复制到其余应用程序文件夹中,也不能把其余应用程序文件夹中的文件复制到沙盒里。安全

(3)、苹果禁止任何读、写沙盒之外的文件,禁止应用程序将内容写到沙盒之外的文件夹中。atom

(4)、沙盒根目录里有三个文件夹:Documents,通常应该把应用程序的数据文件存到这个文件夹里,用于存储用.net

沙盒就是应用程序的安装过程当中、系统为每一个单独的应用程序生成它的主目录和一些关键的子目录  —文件夹orm

沙盒机制是一种安全体系,它规定了应用程序只能在本应用程序沙盒中读取文件,不能够访问其余地方的内容。全部的非代码文件都保存在这个地方,好比图片、音频、视频、属性列表(偏好设置)和文本文件等。视频

优势 安全 每一个应用程序都在本身的沙盒内 不能随意跨越本身的沙盒区访问别的应用程序沙盒的内容,应用程序向外请求或接受数据都须要通过权限认证游戏

缺点 文件访问受限 访问文件不灵活图片

怎么去到沙盒下?文档

首先在代码中打印沙盒路径,

NSLog(@"路径%@",NSHomeDirectory());

运行代码,控制台输出:

在finder中command+shift+g 前往文件夹把输出它打印的沙盒路径

如上图咱们看到的NSHomeDirectory()  // 程序主目录,可见子目录(3个):Documents、Library、tmp,library下有caches,he

Documents :保存应用运行时生成的须要持久化的数据,iTunes同步设备时 会备份该目录 。例如,游戏应用可将游戏存档保存在该目录

tmp :保存应用运行时所需的 临时数据 ,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录

Library/Caches :保存应用运行时生成的须要持久化的数据,iTunes同步设备时 不会备份该目录 。通常存储体积大、不须要备份的非重要数据

Library/Preference :保存应用的全部偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时 会备份该目录

去沙盒路径的第一种方法,拿去Documents为列

[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

其余的都同样

第二种方法

[NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask, YES)[0]; // 程序目录,不能存任何东西
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];//文档目录,须要ITUNES同步备份的数据存这里,可存放用户数据
[[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0] stringByAppendingFormat:@"/Preference"];// 配置目录,配置文件存这里
[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0]stringByAppendingFormat:@"/Caches"];//缓存目录,系统永远不会删除这里的文件,ITUNES会删除
NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];// 临时缓存目录,APP退出后,系统可能会删除这里的内容
沙盒路径下数据的存储
//存数据
NSString * sandBoxpath = [NSHomeDirectory()stringByAppendingPathComponent:@"/Documents/save"];
NSString * stroeSting  =@"yi";
[stroeStingwriteToFile:sandBoxpathatomically:YESencoding:NSUTF8StringEncodingerror:nil];
//取数据
NSString * checkString = [[NSStringalloc]initWithContentsOfFile:[NSHomeDirectory()stringByAppendingPathComponent:@"/Documents/save"]encoding:NSUTF8StringEncodingerror:nil];
NSLog(@"取出的数据是:%@",checkString);

去到沙盒下看下

确实咱们写入的文件是存在的

看下控制台打印

2016-06-30 08:52:32.090 Store[814:16463]取出的数据是:yi

也就是說这个字符串是写入文件的。