IOS开发之沙盒管理

本文详细介绍了iOS应用的沙盒路径,包括Documents、Library/Cache、Library/Preferences和tmp目录的用途和管理规则,并提供了代码示例展示如何在这些路径下保存和读取文件,以及使用NSUserDefaults进行用户偏好设置的存储和读取。强调了不同路径的备份策略和系统清理行为,帮助开发者更好地管理应用数据。

查找沙盒路径

  • 沙盒路径
//路径是会改变的
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

方便后续使用,生成DocumentsCachetmp路径

//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];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值