美文网首页
了解iOS 的沙盒路径

了解iOS 的沙盒路径

作者: 晓_我想去环游世界 | 来源:发表于2017-05-12 10:13 被阅读145次

写在前面:

以前对于iOS沙盒的理解还等留在Sdwebimage这个第三方的库上,就是项目中的一些缓存图片啊什么的放到Caches目录下进行缓存,避免了重复去下载。清除项目的缓存啊什么的我一般也只去操作这个文件夹,最近是因为要做一个离线地图包的下载,才发现了其中的问题~~

一、什么是沙盒机制

处于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,比如在用户授权情况下访问通讯录,相册等),这个规则展示了iOS系统的封闭性。

二、沙盒机制的结构

每个应用程序目录下有三个文件(Documents、Library、temp)以及一个.app的包,NSString *path = NSHomeDirectory();可以得到这个目录。

1.Documents目录:最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。

2.Library目录:包含两个子目录(Preferences、Caches)。

Preferences路径:包含程序的偏好设置文件,iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息,我们常用的NSUserDefaults储存的数据就在这个路径下。

Caches路径:iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。Sdwebimage缓存下来的图片文件就在这个文件下。

3.tmp目录:iTunes不会同步此文件夹,这个目录用于存放临时文件。tmp目录不是你程序退出的时候就清空,是在你内存不足的情况系统会给你清空。尽管iCloud不会备份这些文件,但在应用使用完这些数据之后要注意随时删除,避免占用用户设备的空间。

三、获取路径

//获取Documents目录路径

NSString*docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)firstObject];

//获取Library的目录路径

NSString*libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES)lastObject];

//获取Caches目录路径

NSString*cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES)firstObject];

//获取tmp目录路径

NSString*tmpDir =NSTemporaryDirectory();


写到这里大家可以发现,一般的缓存,数据多而且不是重要的文件我们缓存到Caches路径完全可以够用了。但是我的需求是下载一个比较重要的文件包,是绝对不会短期更新也不能被清理掉的,比如说那些音乐应用。可惜的是通过我的了解Caches路径下的东西系统也会清理。那么我的解决方案是什么呢?

解决:

所以,为了保险起见,最靠谱的还是放在/Documents中。我们在上面提到过了Documents目录是会被iCloud备份的,这也就会引起App需要备份的体积变大了,这也是苹果不允许的,甚至会被拒绝上架。那要怎么解决呢?所以我们既要把缓存的内容放入Dcouments中,又不能让iCloud备份。Apple已经提供了相应的函数,如下(iOS 5.1及以后的版本):

-(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL*)URL{

assert([[NSFileManagerdefaultManager]fileExistsAtPath:[URL path]]);

NSError*error=nil;

BOOL success=[URL setResourceValue:[NSNumbernumberWithBool:YES]

forKey:NSURLIsExcludedFromBackupKeyerror:&error];

if(!success){

NSLog(@"Error excluding %@ from backup %@",[URL lastPathComponent],error);

}

return success;

}

参考文章:     一次审核被拒的经历-关于iCloud到底应该备份什么数据

相关文章

  • iOS 数据持久化知识汇总(1)—————存储路径

    一、沙盒和沙盒存储路径 1、沙盒是什么 iOS 每个iOS应用都有自己的应用沙盒,应用沙盒就是文件系统目录 。所...

  • 了解iOS 的沙盒路径

    写在前面: 以前对于iOS沙盒的理解还等留在Sdwebimage这个第三方的库上,就是项目中的一些缓存图片啊什么的...

  • IOS 开发之文件路径

    IOS开发中涉及到文件路径,就需要了解苹果的沙盒机制。那么什么是沙河? 一、沙盒的概念与作用 1、IOS应用程序只...

  • Objective-C沙盒结构

    导读: 一、什么是沙盒机制二、沙盒的特点三、沙盒的结构组成四、获取沙盒目录路径 一、什么是沙盒机制 iOS中的沙盒...

  • iOS 沙河路径

    沙河路径 每个iOS 应用都有自己的沙盒路径,应用沙盒就是文件系统目录应用沙盒文件目录:应用程序包、Documen...

  • OC - 沙盒

    导读: 一、什么是沙盒机制 二、沙盒的特点 三、沙盒的结构组成 四、获取沙盒目录路径 一、什么是沙盒机制 iOS中...

  • iOS开发之沙盒机制

    沙盒 iOS系统,每个应用都有自己的沙盒,每个沙盒都是相互独立的,不能互相访问。 获取沙盒路径的代码: NSHom...

  • iOS读写json文件

    一.获取沙盒路径 每个iOS应用都有自己专属的应用沙盒,应用沙盒就是文件系统中的目录。但是iOS系统会将每个应用的...

  • 使用沙盒的正确姿势

    在学习iOS存储方法之前,先了解一下iOS存储机制——沙盒应用沙盒机制:每个iOS应用都有自己的应用沙盒(文件系统...

  • iOS 文件操作

    iOS文件(沙盒目录,文件创建、移动、复制等) 目录获取获取沙盒的主目录路径: (NSString *)homeD...

网友评论

      本文标题:了解iOS 的沙盒路径

      本文链接:https://www.haomeiwen.com/subject/xghstxtx.html