原文:https://www.jianshu.com/p/a9c64b15df85
一、沙盒和沙盒存储路径
1、沙盒是什么?
iOS 每个iOS应用都有自己的应用沙盒,应用沙盒就是文件系统目录 。所有的非代码文件都要保存在此。沙盒就是一种独立、安全、封闭的空间 ,不能随意跨越自己的沙盒去访问别的应用程序沙盒中的内容。
沙盒的四个目录:Documents、Library/Preferences 、Library/Caches 、tmp
Documents:保存用户产生的数据;
Library/Preferences: 保存偏好设置 如:NSUserDefaults
Library/Caches: 缓存数据 如 SDWebImage 中的图片
tmp: 临时数据 程序退出会删除目录
2、获取沙盒路径方法
2.0、获取沙盒的根目录
NSString *homePath = NSHomeDirectory();
2.1 获取沙盒路径下Documents 目录
方法1:拼接
NSString *homeDocumentPath = NSHomeDirectory();
NSString *documents = [homeDocumentPath stringByAppendingPathComponent:@"Documents"];
注:stringByAppendingPathComponent 和 stringByAppendingString 的取别
stringByAppendingPathComponent 是路径拼接 会在字符串前添加 “/”
stringByAppendingString 拼接字符串 没有 “/”
方法2: 搜索
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents1 = [paths lastObject];
注: 通过搜索获得数组(paths )中只有一条数据 所以 不论是取最后一条还是第一条都是正确的
方法3: NSFileManager
NSURL*documents2 = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
//url 转字符串
NSString*documentsPath2 = documents2.absoluteString;
NSLog(@"路径是:%@",documentsPath2);
2.2、获取沙盒路径下 Library/Caches 目录
和上面 方法相同,参数不同
方法1:拼接
NSString *homePath = NSHomeDirectory();
NSString *cachePath = [homePath stringByAppendingPathComponent:@"Library/Caches"];
方法2:
NSArray *cpaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath1 = [cpaths lastObject];
方法3:
NSURL*cacheUrl = [[[NSFileManager defaultManager] URLsForDirectory: NSCachesDirectory inDomains:NSUserDomainMask] lastObject];
NSString*cachePath2 = cacheUrl.absoluteString;