iOS沙盒常用的几种路径
简述
1.每个app下都有一个沙盒目录,隔离其他App,系统不允许其他App访问别的App的沙盒路径。
2.iOS的沙盒下面主要包含该以下三个文件:Documents、Library(内含Caches,Preferences,Application Support,Frameworks)、temp。
3.Home目录 NSString *homeDirectory = NSHomeDirectory();
Document文件
用来保存程序运行时生成的需要持久化的数据,iTunes会自动备份该目录,苹果官方建议程序中创建比较重要的文件的和浏览过的程序存放在这里。
获取方法:
// 文件路径是数组,这里取第一个元素
NSString *docuPath = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)[0];
Library文件
用来保存app的偏好设置和主要存储缓存数据,需要持久化的数据不建议放在该目录之下,以免系统强制删除。Library文件里面包括四个文件。
1.Caches:主要缓存数据,当设备低存储空间时会被删除。iTunes设备不会进行拷贝。
2.Preferense:App的偏好设置和其他设置,iTunes、iCloud会进行备份该目录。NSUserDefaults就是默认存放在此文件夹下面。
3.Application Support:建议用来存储除用户数据相关以外的所有文件,如游戏的新关卡。在iTunes和iCloud备份时会备份该目录。
4.Frameworks:用来保存动态库的文件夹,在iOS系统中已不能使用,该目录可以忽略。
获取方法:
//library目录
NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
//caches目录
NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
//preference目录
NSString *preferencePath = NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES).firstObject;
//application support目录
NSString *applicationSupportPath = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES).firstObject;
Temp文件
临时文件夹,iTunes不会同步该目录,保存app运行中的临时文件,iphone重启会自动删除本目录下文件。
// 文件路径是数组,这里取第一个元素
NSString *tmpDir = NSTemporaryDirectory();
综上所述
1.我们保存的持久化文件可以放在Document和AppliactionSupport目录下,临时缓存文件放在在Temp和Cachese目录下,由于Temp和Cachese目录下系统会删除,所以不能保存重要文件。
2.除系统推荐的目录之外,用户也可以自己创建目录,也可以在推荐的目录下创建子目录进行管理
//获取Document文件
NSString * docuPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
//将需要创建的串拼接到后面
NSString * rarPath = [docuPath stringByAppendingPathComponent:@"document"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir = NO;
// fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录
BOOL existed = [fileManager fileExistsAtPath:rarPath isDirectory:&isDir];
//如果文件夹不存在
if ( !(isDir == YES && existed == YES) ) {
[fileManager createDirectoryAtPath:rarPath withIntermediateDirectories:YES attributes:nil error:nil];
}