程序中的文件之沙盒以及plist文件的初步使用

沙盒是相对于“应用程序”的文件,也就是相对应app所在的页面的文件。

每一个应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须呆在在积极的沙盒中,其他的应用不能够访问沙盒。(这个是在ios8之前)

ios8之后,沙盒进行了开发,有关应用的安全性有待研究。

沙盒的根目录为:/Users/zhumin/Library/Developer/CoreSimulator/Devices/09E156EA-B44B-4CCA-9E32-9286D332DDF0/data/Containers/Data/Application/A861DA79-90CE-4106-9332-2A678A157AE0  //可见,一般沙盒的中的文件夹的名字都是应用随机产生一系列的字符串。


相关的图片:

 

(开发平台的文件夹,一般都是存放在mainbundle的目录下面)

(ios8之后的沙盒文件加的目录,程序的文件夹目录不在这里了,有待回答?)


(ios8 之前的文件夹,mainbundle文件夹在沙盒里面,并且沙盒文件夹是隔离的。)


下面按照ios7之前的文件加线了解下:

应用程序包:(图:layer)包含了所有哦的资源和可执行文件。

Documents:保存程序所需的持久化的数据运行,ITunes自动备份该目录。eg:游戏应用可将游戏存档保存在该目录

(存放主要的文件目录)使用plist存储,一般都是存储到这个目录下。

tmp:保存程序所需的临时数据 运行,使用完毕之后会将相应的文件从该目录中删除,应用没有运行时候也会清楚该目录下面的文;ITunes不会备份这个文件夹的目录。

(存放一些运行的时候锁需要的临时数据)

Library:(库)分别有:

           1)caches,保存应用运行时生成的需要持久化的数据,也就是缓存,我们常见的就是浏览器缓存,其实一样的道理。Itunes不会同步备份

           2)preference,保存应用的所有偏好设置iOSSettings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录。

           我们锁使用的NSUserDefault 来持久化的时候,都会用到这个类来讲数据存储到这个目录下。


沙盒文件目录的获取方法:

1)通过查找出文件的路径,然后直接获取,也就是写死了,建议不那么写因为我们安装到手机上面等等,沙盒的文件夹的名字都是随机的字符串,所以会改变的。

2)通过获取沙盒的主目录方法,我们可以通过NSHomeDirectory()这个方法来获取,然后再在后面加上这个文件夹的名字。

eg:NSString * home = NSHomeDirectory();

[home stringByAppendingString(@"/Documents")];//这种方法也是不去提倡的,因为这个方法中的“\”有可能格式会该厂“/”,所以存在不确定性。

所以,如果呀直接改变加载文件夹的目录,可以通过另外一个方法:[home stringByAppendingComponet(@"Documents")];这个方法就不存在“\”这个问题。

3)要获取documents的文件夹的目录,可以直接使用方法来获取。

eg:      NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);这个方法来直接获取。

NSDocumentDirectory表示要查找的文件加目录是decument;

YES代表展开路径中的波浪字符“~”,也就是用户的目录;

NSUserDomainMask代表从用户文件夹下找。


// iOS中,只有一个目录跟传入的参数匹配,所以这个集合里面只有一个元素

NSString*documents = [array objectAtIndex:0];这样就获取到了目录。要保存文件在这个目录下面,我们可以通过先创建一个文件的名字,然后添加到后面即可。


tmp NSString * tmp = NSTemporaryDirectory ();

Library/Caches ( Documents 类似的 2 种方法 )
利用沙盒根目录拼接 ”Caches” 字符串

Library/Preference :通过 NSUserDefaults 类存取该目录下的设置信息


#######
属性列表是一种 XML 格式的文件,拓展名为 plist
如果对象是 NSString NSDictionary NSArray NSData NSNumber 等类型,就可以使用 writeToFile:atomically : 方法直接将对象写到属性列表文件中
利用 NSSearchPathForDirectoriesInDomains 函数 ( 将函数的第 2 个参数改为: NSCachesDirectory 即可 )



eg:下面的一个plist文件的例子:
 //1、获取文件夹document的路径  
 NSString *path1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  
 NSString *path = [path1 stringByAppendingString:@"exmaple.plist"];    
NSLog(@"%@",path);    
   // 将数据封装成字典   
 NSMutableDictionary *dict = [NSMutableDictionary dictionary];    
[dict setObject:@"母鸡" forKey:@"name"];  
[dict setObject:@"15013141314" forKey:@"phone"];   
[dict setObject:@"27" forKey:@"age"];   
// 将字典持久化到Documents/stu.plist文件中   
[dict writeToFile:path atomically:YES];

 //通过上面的路径获取文件的数据,这里只是方便,如果在其他文件中获取文件的数据,我们需要再次获取文件的目录
  NSDictionary *dict2 = [NSDictionary dictionaryWithContentsOfFile:path];
  NSLog(@"%@",dict2.description);


运行之后的结果:

   
可以通过文件的方式打开,会看到里面是xml的格式。

获取之后的结果输出:
 
通过上面,我们也可以数据写入和获取的方法。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值