IOS 沙盒(sandbox)机制和文件操作

1、IOS沙盒机制( 沙盒(sandbox)机制

 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。

 1.1、每个应用程序都有自己的存储空间 
 1.2、应用程序不能翻过自己的围墙去访问别的存储空间的内容 
 1.3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。 
     通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。 


--------xode6 以下访问方法参考如下:----------

2、打开模拟器沙盒目录

下面看看模拟器的沙盒文件夹在mac电脑上的什么位置。

文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library。

2.1 方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名

  

显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

输完单击Enter键,退出终端,重新启动Finder就可以了 重启Finder:鼠标单击窗口左上角的苹果标志-->强制退出-->Finder-->

现在能看到资源库文件夹了。

技术分享

打开资源库后找到/Application Support/iPhone Simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录了。

技术分享 

2.2 方法2、这种方法更方便,在Finder上点->前往->前往文件夹,输入/Users/username/Library/Application Support/iPhone Simulator/  前往。

username这里写你的用户名。

3、目录结构

默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。 
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下; 
Library:存储程序的默认设置或其它状态信息; 
tmp:提供一个即时创建临时文件的地方。 

iTunes在与iPhone同步时,备份所有的Documents和Library文件。 

iPhone在重启时,会丢弃所有的tmp文件。

   技术分享技术分享 



-----------xcode6 以上版本 参考如下------------------------------------

技术分享

默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
Library:存储程序的默认设置或其它状态信息;
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
tmp:提供一个即时创建临时文件的地方。


iTunes在与iPhone同步时,备份所有的Documents和Library文件。
iPhone在重启时,会丢弃所有的tmp文件。

参考代码可以使用:

//取得完整路径名

NSString *fileName = [plistPathstringByAppendingPathComponent:@"textdemo.plist"];

       NSLog(@"工程下fileName is %@",fileName);



1、创建项目Plistdemo


项目创建之后可以找到项目对应的plist文件,打开如下图所示:

技术分享

在编辑器中显示类似与表格的形式,可以在plist上右键,用源码方式打开,就能看到plist文件的xml格式了。



2、创建plist文件。


按command +N快捷键创建,或者File —> New —> New File,选择Mac OS X下的Property List

技术分享

技术分享

创建plist文件名为plistdemo。



打开plistdemo文件,在空白出右键,右键选择Add row 添加数据,添加成功一条数据后,在这条数据上右键看到 value Type选择Dictionary。点加号添加这个Dictionary下的数据

技术分享


创建完成之后用source code查看到plist文件是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>广东</key>
	<array>
		<string>肇庆</string>
		<string>深圳</string>
		<string>广州</string>
	</array>
	<key>四川</key>
	<array>
		<string>南充</string>
		<string>绵阳</string>
		<string>成都</string>
	</array>
</dict>
</plist>

3、读取plist文件的数据 和 打印参考如下代码:

NSBundle *bundle = [NSBundle mainBundle];
        NSString *path = [bundle pathForResource:@"citys" ofType:@"plist"];
        //读取数据到Nsdictionary字典中
        NSDictionary *dictionary = [[NSDictionary alloc]initWithContentsOfFile:path];
        //NSLog(@"size is %d",[dictionary count]);
        
        NSArray *array = [dictionary allKeys];
        //循环输出字典得Data 数据
        for (id key in  dictionary) {
            NSArray *arrays = [dictionary objectForKey:key];
            for (int i =0; i < [arrays count]; i++) {
                NSLog(@"key:%d, value:%@",i,[arrays objectAtIndex:i]);
            }
        }
        
        //plist 文件得写操作
        NSMutableDictionary *data = [[NSMutableDictionary alloc]init];
        //添加数据
        [data setObject:@"one" forKey:@"1"];
        [data setObject:@"two" forKey:@"2"];
        [data setObject:@"there" forKey:@"3"];
        [data setObject:@"four" forKey:@"4"];
        //写入数据进沙盒
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *plistPath = [paths objectAtIndex:0];
        //取得完整路径名
        NSString *fileName = [plistPath stringByAppendingPathComponent:@"textdemo.plist"];
        NSLog(@"工程下fileName is %@",fileName);
        //创建并写入文件
        [data writeToFile:fileName atomically:YES];
        
        //检查是否写如
        NSMutableDictionary *writeData = [[NSMutableDictionary alloc]initWithContentsOfFile:fileName];
        NSLog(@"write data is%@",writeData);


当然控制台已经打印出来来哈

技术分享

有关文件操作,先写到这里,更复杂的NSData或sqlite保存,以后用到,学到时再补充吧。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。