代码改变世界

about caches directory

2013-05-15 14:41  三戒1993  阅读(146)  评论(0编辑  收藏  举报

苹果 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的文件

删除不会带来危险的文件