about caches directory

本文详细介绍了iOS5系统中新增的存储机制,包括在设备存储空间不足时如何自动清理高速缓存文件,如何通过设置属性避免重要文件被清除,以及iCloud备份规则等。为开发者提供了实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

苹果 iOS 5 系统增加了一个新的机制——在设备容量空间不足的情况下自动清除高速缓存文件或临时目录的内容。这意味着,如果你设备的容量快到极限了,应用存储的很多离线内容,包括文章、杂志、图书、漫画以及其他数据都将被清空!如果用户需要,将不得不重新下载这些内容。

 

应用主目录下的Document目录和Library目录(除了该目录下的Caches)的文件都会被自动的备份到iCloud,因此,可以把较大的临时文件或随时可以重建的文件放在Library\Caches目录下,就可以帮用户节省iCloud空间,提供用户体验

 

Document目录下数据过大,存放数量过多,也会有被拒绝的风险

 

iOS5还有一个机制值得注意,就是在设备容量空间不足的情况下,系统会自动清除高速缓存文件或临时目录的内容,当然,Library\Caches目录下的内容就会被清除掉,所以对开发人员来说是一个两难的选择。但从这种机制来看,apple是希望应用尽量在本地减少存储,但对中国的网络条件来说,完全依赖网络的应用应当还不太成熟。但对开发人员来说,在读取Library\Caches目录下的文件的时候,至少应当先做一个判断,看看文件在不在,以免引起程序崩溃。

 

//新版本的---------

ios 5.0.1版将提供一个新的功能,可对一个文件设定一个属性,告诉系统即使在低存储的情况下,对这个文件也不会进行删除,这样的文件在用户备份到iCloud或iTunes的时候也不会被备份,所以需要开发人员手动进行管理。此外,设定了这种属性的文件无论放在哪一个目录下都可以保持上述特性。


实现代码如下:

 

view plain

  1. #include <sys/xattr.h>  
  2. - (void) AddSkipBackupAttributeToFile: (NSURL*) url  
  3. {  
  4.   u_int8_t b = 1;  
  5.   setxattr([[url path] fileSystemRepresentation], "com.apple.Mobile  
  6. Backup", &b, 1, 0, 0);  
  7. }  

//iCloud 数据存储准则

 

为了保证数据备份的可能性和有效性,请确保你的应用数据符合以下规则:

1.只有用户生成的文件、其他数据及其他程序不能重新创建的文件,应该保存在<Application_Home>/Documents目录下面,并将通过iCloud自动备份。

2.可以重新下载或者重新生成的数据应该保存在 <Application_Home>/Library/Caches 目录下面。举个例子,比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹。

3.只是临时使用的数据应该保存到 <Application_Home>/tmp 文件夹。尽管 iCloud 不会备份这些文件,但在应用在使用完这些数据之后要注意随时删除,避免占用用户设备的空间。

如果我们暂时暂时忘记很多新闻、杂志、地图应用的唯一目的就是显示离线内容这个事实的话,以上条款还是相当清楚和有意义的。

3.应用审核被拒

最近不断有开发者反应在 Documents 文件夹存储 “任何/一些/很多”(any/some/much) 数据的应用被苹果的应用审核团队拒绝。但有些开发者已经成功地向应用审核团队解释他们的应用存储文件的原理,并表明他们的应用是完全遵守开发规则的。

现在看来,苹果应用审核团队也并没有十足的把握判断到底哪些文件夹中存储的哪些数据是用户生成的,而哪些数据又是可以重新下载和重新生成的。

4.ITUNES 和 ICLOUD 到底备份了哪些内容

应用文件夹所有内容都会备份,除了:

应用程序本身bundle(.app)

<Application_Home>/tmp

<Application_Home>/Library/Caches directory

 

这在iCloud 数据存储准则中有很清楚的说明。

其他的文件也清楚的申明了,应用程序支持文件夹也会被iTunes备份。在讨论中一些开发者建议应用支持文件夹应该比缓存文件夹更安全点(更持久点)。在我看来,自从iCloud 存储推出以来,苹果应用审核团队将会重点打击那些需要存储大量应用支持文件在Documents 文件夹中的应用。

5.IOS 5 的行为变化

在 iOS 5 设备中,当用户收到存储空间不足的警告时,如果此时应用没有运行,那么该应用的<Application_Home>/Library/Caches文件夹中的数据将被清空。

这意味着在 iOS 5 中应用将没有任何文件夹可以存储以下文件:

没有备份到iTunes/iCloud的文件

删除不会带来危险的文件


Microsoft Windows [版本 10.0.26100.3476] (c) Microsoft Corporation。保留所有权利。 C:\Windows\System32>cd F:\zy\yd\one C:\Windows\System32>dir F:\zy\yd 驱动器 F 中的卷是 新加卷 卷的序列号是 80CC-10BE F:\zy\yd 的目录 2025/03/27 20:51 <DIR> . 2025/03/27 20:51 <DIR> .. 2025/03/27 20:51 <DIR> one 0 个文件 0 字节 3 个目录 168,735,858,688 可用字节 C:\Windows\System32>cd F:\zy\yd\one C:\Windows\System32>cd ~ 系统找不到指定的路径。 C:\Windows\System32>cd / C:\>cd F:\zy\yd\one C:\>cd F:\zy\yd\one C:\>cd "F:\zy\yd\one" C:\>cd F 系统找不到指定的路径。 C:\>cd /F 系统找不到指定的路径。 C:\>cd F: F:\zy\yd\one C:\>cd F: F:\zy\yd\one C:\># 进入项目根目录 '#' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\>cd F:\zy\yd\one C:\> C:\># 删除 Gradle 缓存 '#' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\>rd /S /Q "%USERPROFILE%\.gradle\caches" C:\> C:\># 重启 Gradle 守护进程 '#' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\>gradle --stop Stopping Daemon(s) 1 Daemon stopped C:\> C:\># 重新生成 Gradle Wrapper '#' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\>gradle wrapper --gradle-version 8.9 --distribution-type bin Starting a Gradle Daemon, 1 stopped Daemon could not be reused, use --status for details > IDLE # 验证生成结果 dir gradle/wrapper FAILURE: Build failed with an exception. * What went wrong: Directory 'C:\' does not contain a Gradle build. A Gradle build's root directory should contain one of the possible settings files: settings.gradle, settings.gradle.kts, settings.gradle.dcl.It may also contain one of the possible build files: build.gradle, build.gradle.kts, build.gradle.dcl. To create a new Gradle build in this directory run 'gradle init' For more information about the 'init' task, please refer to https://docs.gradle.org/8.9/userguide/build_init_plugin.html in the Gradle documentation. For more details on creating a Gradle build, please refer to https://docs.gradle.org/8.9/userguide/tutorial_using_tasks.html in the Gradle documentation. * Try: > Run gradle init to create a new Gradle build in this directory. > Run wit
最新发布
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值