iOS沙盒路径及路径下数据的存储和读取

 

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

  1. 应用程序可以在自己的沙盒里运作,但是不能访问任何其他应用程序的沙盒。
  2. 应用程序间不能共享数据,沙盒里的文件不能被复制到其他应用程序文件夹中,也不能把其他应用程序文件夹中的文件复制到沙盒里。
  3. 苹果禁止任何读、写沙盒以外的文件,禁止应用程序将内容写到沙盒以外的文件夹中。
  4. 沙盒根目录里有三个文件夹:Documents,一般应该把应用程序的数据文件存到这个文件夹里,用于存储用
  5. 沙盒就是应用程序的安装过程中、系统为每个单独的应用程序生成它的主目录和一些关键的子目录  —文件夹
  6. 沙盒机制是一种安全体系,它规定了应用程序只能在本应用程序沙盒中读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、音频、视频、属性列表(偏好设置)和文本文件等

 

 

优点:安全 每个应用程序都在自己的沙盒内 不能随意跨越自己的沙盒区访问别的应用程序沙盒的内容,应用程序向外请求或接受数据都需要经过权限认证

缺点 :文件访问受限 访问文件不灵活

 

怎么去到沙盒下?

 

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

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/saveFile"];

NSString * stroeSting  =@"yi";
[stroeStingwriteToFile:sandBoxpathatomically:YESencoding:NSUTF8StringEncodingerror:nil];

//取数据

NSString * checkString = [[NSStringalloc]initWithContentsOfFile:[NSHomeDirectory()stringByAppendingPathComponent:@"/Documents/saveFile"]encoding:NSUTF8StringEncodingerror:nil];
NSLog(@"取出的数据是:%@",checkString);

 

去到沙盒下看下

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

看下控制台打印

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

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

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值