查找沙盒路径
- 沙盒路径
//路径是会改变的
NSString *home = NSHomeDirectory();
bundle路径(根目录)
[[NSBundle mainBundle] bundlePath]
沙盒目录

Documents
保存由应用程序产生的需要持久化文件或数据,例如:游戏进度、涂鸦软件的绘图
- 目录中的文件会自动保存到
icloud上 iTunes会备份- 不要保存从网络上下来的文件
Library/Cache
保存应用运行时生成的需要持久化的数据,一般存储体积大、不需要备份的非重要数据
- 保存临时文件,后续需要使用,例如:缓存图片,离线地图数据
- 系统不会自动清理此目录
- 程序员需要提供清理此目录的功能
iTunes不会备份
Library/Preferences
保存应用的所有偏好设置,IOS的Setting(设置)应用会在该目录中查找应用的设置信息
iTunes会备份
tmp
保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除,应用没有运行时,系统也可能会清除该目录下的文件
- 系统的磁盘空间不足,会自动清理
- 系统重启,会清理该文件夹
iTunes不会备份
使用沙盒路径
- 拼接字符串(
Documents)
//获取根目录
NSString *home = NSHomeDirectory();
NSString *docPath = [home stringByAppendingString:@"/Documents"];
//也可以调用这个方法
NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];
- 搜索的形式(
Documents)
//NSSearchPathForDirectoriesInDomains搜索函数
//参数1 ForDirectories 搜索哪个文件夹
//参数2 SeachPath 搜索路径
//参数3 BOOL YES
//返回值 Array类型 返回的值 + lastObject 或者 [0]都可以
NSString *path = @"http://www.baidu.com";
NSString *Document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
//获取路径最后一部份
NSString *fileName = [path lastPathComponent];
NSLog(@"%@",[cache stringByAppendingPathComponent:fileName]);
为NSString添加分类Sandbox
方便后续使用,生成Documents、Cache、tmp路径
//NSString(Sandbox)
-(instancetype)appendCache{
return [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:[self lastPathComponent]];
}
-(instancetype)appendTemp{
return [NSTemporaryDirectory()stringByAppendingPathComponent:[self lastPathComponent]];
}
-(instancetype)appendDocument{
return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:[self lastPathComponent]];
}
- 图片保存到沙盒中
if(img){
[data writeToFile:[appINfo.appendCache] atomically:YES];
}
- 检查沙盒缓存中是否有图片
NSData *data = [NSData dataWithContentsOfFile:[appInfo.icon appendCache]];
if(data){
UIImage *img = [UIImage imageWithData:data];
//缓存到内存,从沙盒取出图片
cell.iconView.iamge = img;
return cell;
}
保存用户数据到Preferences
用于快速存储键值对,不用关心文件夹和文件名,使用方式跟字典一致
- 保存进沙盒
//NSUserDefaults是单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//添加属性
[userDefaults setObject:self.nameView.text forKey:@"name"];
[userDefaults setObject:self.pwdView.text forKey:@"pwd"];
//立即保存
[userDefaults synchronize];
- 读取沙盒信息
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
self.nameView.text = [userDefaults objectForKey:@"name"];
self.pwdView.text = [userDefaults objectForKey:@"pwd"];
- 值得注意的是
ios8之前,ios8之后立即写入,其写入不是立即写入,而是根据时间戳定时写入本地磁盘,想要立即写入需要加入
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//写入完成之后加入这句话,实现立即写入
[userDefaults synchornize];
本文详细介绍了iOS应用的沙盒路径,包括Documents、Library/Cache、Library/Preferences和tmp目录的用途和管理规则,并提供了代码示例展示如何在这些路径下保存和读取文件,以及使用NSUserDefaults进行用户偏好设置的存储和读取。强调了不同路径的备份策略和系统清理行为,帮助开发者更好地管理应用数据。

3584

被折叠的 条评论
为什么被折叠?



