iOS之沙盒机制和如何获取沙盒路径

iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒。每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme。沙盒里面的文件可以是照片、声音文件、文本、属性列表等。

沙盒机制简介

沙盒简述:

  1. 每一个APP都有一个存储空间,就是沙盒。

  2. APP之间不能相互通信。

  3. 沙盒根目录结构:Documents、Library、temp。

简述一下Documents、Library、temp的区别:

  1. Documents:用于存储用户数据,iTunes备份和恢复的时候会包括此目录,所以,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下。

  2. Library:包含两个子目录:Caches 和 Preferences。Caches用来存放用户需要换成的文件。Preferences是APP的偏好设置,可以通过NSUserDefaults来读取和设置。

  3. tmp: 用于存放临时文件,这个可以放一些当APP退出后不再需要的文件。

打开模拟器沙盒方法

方法一:前往文件夹打开

/Users/ligang/Library/Application Support/iPhone Simulator/ 

直接在Finder->前往->前往文件夹,输入上面的内容即可。记住将ligang换成你的电脑用户名。

方法二:通过Finder一步步查找

模拟器上的APP的沙盒实在用户目录下的资源库里面,但是资源库是隐藏文件夹。所以查看沙盒之前,现将隐藏文件夹显示出来。显示隐藏文件的命令:

defaults write com.apple.finder AppleShowAllFiles -bool true

用心的童鞋会发现,隐藏隐藏文件的命令:

defaults write com.apple.finder AppleShowAllFiles -bool false

查找步骤请看图:

iOS之沙盒机制和如何获取沙盒路径

关于沙盒机制(SandBox)的介绍大概就是这样,以后面试的时候万一碰到你就可以这么回答。

获取沙盒根目录

获取沙盒根目录,直接调用NSHomeDirectory():

 //获取沙盒根目录
NSString *directory = NSHomeDirectory();
NSLog(@"directory:%@", directory);

控制台输出:

2015-07-22 00:40:16.185 iOSStrongDemo[1605:555658] directory:/var/mobile/Containers/Data/Application/F9418815-51A9-4A0A-A76C-6FD37C400928

这个是真机的路径,大家有时间的话可以看看模拟器的根目录路径。

获取Documents路径

获取Documents路径如下:

//获取Documents路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);

控制台输出:

2015-07-22 00:41:41.397 iOSStrongDemo[1613:556159] path:/var/mobile/Containers/Data/Application/A62B886B-A8F0-4215-B59D-1F505C3997BD/Documents

获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取。

获取Library路径

 //获取Library路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);

控制台输出:

2015-07-22 00:43:15.803 iOSStrongDemo[1619:556638] /var/mobile/Containers/Data/Application/17300507-4643-4DE7-BC68-E13DB19C8D98/Library

获取Caches路径

//获取Caches路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);

控制台输出:

2015-07-22 00:44:31.383 iOSStrongDemo[1626:557083] path:/var/mobile/Containers/Data/Application/1E945B52-E29D-4041-A489-1AA1B11BB960/Library/Caches

获取tmp路径

NSString *tmp = NSTemporaryDirectory();
NSLog(@"tmp:%@", tmp);

控制台输出:

2015-07-22 00:46:07.846 iOSStrongDemo[1632:557537] tmp:/private/var/mobile/Containers/Data/Application/4BE02307-1CC5-47E8-BEA8-CEBB7ED5A402/tmp/

以上是iOS开发中获取沙盒路径的方法,也许还有更好的获取方法等待我们去发现。后面我们还会讲到关于在沙盒里进行读写文件操作。