iOS--沙盒相关介绍

2016-05-26  本文已影响78人  GaryHuang

一.什么是沙盒?
iOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。
每一个APP都有一个存储空间,就是沙盒,APP之间不能相互通,唯独可以通过URL Scheme通信.(关于URL Scheme通信:见http://www.superqq.com/blog/2015/07/14/xcode6-dot-4zhu-ce-url-schemebu-zou-xiang-jie/)。
二.如何查看沙盒?
打开模拟器沙盒的方法有:
1.前往文件夹打开
直接在Finder->前往->前往文件夹(或者点击桌面空白处command+shift+g),输入上面的内容即可。记住将XXXXX换成你的电脑用户名。

/Users/XXXXX/Library/Developer/CoreSimulator/

2.通过finder逐步查找


沙盒一.png
沙盒二.png
沙盒三.png

三.沙盒里边有什么?作用是什么?
1.Documents:用于存储用户数据,iTunes备份和恢复的时候会包括此目录,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下。
2.Library:包含两个子目录:Caches 和 Preferences。Caches用来存放用户需要换成的文件。Preferences是APP的偏好设置,可以通过NSUserDefaults来读取和设置。


沙盒四.png
3.tmp:用于存放临时文件,这个可以放一些当APP退出后不再需要的文件。
四.通过代码获取沙盒路径
1.获取沙盒的Home目录
   //获取根目录
    NSString *homePath = NSHomeDirectory();
    NSLog(@"Home目录:%@",homePath);

2.获取沙盒的Documents目录

//获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取,所有应用沙盒目录组成一个数组结构的数据存放
    NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsPath = [docPath objectAtIndex:0];
    NSLog(@"Documents目录:%@",documentsPath);

3.获取沙盒的Cache目录

//获取Cache目录
    NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [cacPath objectAtIndex:0];
    NSLog(@"Cache目录:%@",cachePath);

4.获取沙盒的Library目录

//获取Library目录
    NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSString *libPath = [libsPath objectAtIndex:0];
    NSLog(@"Library目录:%@",libPath);

5.获取沙盒的temp目录

//temp目录
    NSString *tempPath = NSTemporaryDirectory();
    NSLog(@"temp目录:%@",tempPath);

6.向沙盒中写入文件

//向沙盒中写入文件
    NSArray *docPathW = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsPathW = [docPathW objectAtIndex:0];
    //写入文件
    if (!documentsPathW) {
        NSLog(@"目录未找到");
        }else {
           NSString *filePaht = [documentsPath stringByAppendingPathComponent:@"test.txt"];
            NSArray *array = [NSArray arrayWithObjects:@"code",@"change", @"world", @"OK", @"", @"是的", nil];
    [array writeToFile:filePaht atomically:YES];
}

7.从沙河中读取文件

 //从沙盒中读取文件
    NSArray *docPathR = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsPathR = [docPathR objectAtIndex:0];
    NSString *readPath = [documentsPathR stringByAppendingPathComponent:@"test.txt"];
    NSArray *fileContent = [[NSArray alloc] initWithContentsOfFile:readPath];
    NSLog(@"文件内容:%@",fileContent);

8.对应的路径地址

2016-05-26 17:04:02.971 ChangePhoto[29818:3102851] Home目录:/Users/XXXXXX/Library/Developer/CoreSimulator/Devices/9ED18B2C-0AC6-4558-BDA0-39A7804715D8/data/Containers/Data/Application/53775754-1EA0-47F3-A765-11358C3A10AF
2016-05-26 17:04:02.971 ChangePhoto[29818:3102851] Documents目录:/Users/XXXXXX/Library/Developer/CoreSimulator/Devices/9ED18B2C-0AC6-4558-BDA0-39A7804715D8/data/Containers/Data/Application/53775754-1EA0-47F3-A765-11358C3A10AF/Documents
2016-05-26 17:04:02.971 ChangePhoto[29818:3102851] Cache目录:/Users/XXXXXX/Library/Developer/CoreSimulator/Devices/9ED18B2C-0AC6-4558-BDA0-39A7804715D8/data/Containers/Data/Application/53775754-1EA0-47F3-A765-11358C3A10AF/Library/Caches
2016-05-26 17:04:02.971 ChangePhoto[29818:3102851] Library目录:/Users/XXXXXX/Library/Developer/CoreSimulator/Devices/9ED18B2C-0AC6-4558-BDA0-39A7804715D8/data/Containers/Data/Application/53775754-1EA0-47F3-A765-11358C3A10AF/Library
2016-05-26 17:04:02.971 ChangePhoto[29818:3102851] temp目录:/Users/XXXXXX/Library/Developer/CoreSimulator/Devices/9ED18B2C-0AC6-4558-BDA0-39A7804715D8/data/Containers/Data/Application/53775754-1EA0-47F3-A765-11358C3A10AF/tmp/
2016-05-26 17:04:03.327 ChangePhoto[29818:3102851] 文件内容:(
    code,
    change,
    world,
    OK,
    "",
    "\U662f\U7684"
)

其中的XXXXXX为你的Mac用户名.
备注:不足之处还望指正!
参考:http://blog.csdn.net/totogo2010/article/details/7671144

上一篇下一篇

猜你喜欢

热点阅读