IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。
(1)、应用程序可以在自己的沙盒里运作,但是不能访问任何其他应用程序的沙盒。
(2)、应用程序间不能共享数据,沙盒里的文件不能被复制到其他应用程序文件夹中,也不能把其他应用程序文件夹中的文件复制到沙盒里。
(3)、苹果禁止任何读、写沙盒以外的文件,禁止应用程序将内容写到沙盒以外的文件夹中。
(4)、应用程序向外请求或接收数据都需要经过权限认证。
应用沙盒目录:
Application Bundle:包含应用可执行文件和所有资源文件,只读。
Document/ 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud同步设备时备份该目录。
Library/Caches/ 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud不同步。
Library/Preferences/ 存放偏好设置。ios的偏好设置(settings)应用也会在该目录查找应用的设置信息。NSUserDefaults保存在该目录下。iTunes或iCloud同步设备时备份该目录。
temp/ 存放应用运行时所需的临时数据。当某个应用没运行时,ios系统可能会清除该目录下的文件。但不可依赖这种自动清除机制,应该及时手动清除。
1、获取沙盒根目录的方法
NSString *homeDir = NSHomeDirectory();
2、获取Document路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
3、 获取Caches路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
4、获取tmp路径
NSString *tmpDir = NSTemporaryDirectory();
5、获取其他路径可参考http://my.oschina.net/meilidashijie/blog/99837
6、获取资源文件可参考http://my.oschina.net/meilidashijie/blog/99837,待补充。
NSSearchPathForDirectoriesInDomains有3个实参,后两个传入固定值(ios中)。该函数源于Mac Os X,在Mac Os X中可为后两个参数传入其他值。第一个参数为NSSearchPathDirectory类型的常量,指定目录的类型。部分常量不能在ios中使用(ios中不存在)。
NSSearchPathForDirectoriesInDomains返回值是NsArray而不是NSString。因为Mac Os X中可能获得多个符合的结果。ios中只有1个结果,所以得到的数组取下标为0的即可。