在iOS上自动清除缓存(清空/清除)缓存文件夹

时间:2012-07-12 12:44:37

标签: ios caching storage mission-critical

我有一个应用程序,可让您下载可扩展应用程序使用量的“模块” 当用户下载模块时,我从服务器获取ZIP文件并将其解压缩到他的Caches文件夹。 (每个拉链的尺寸可以从60k到2MB)。

不幸的是,有超过 300 模块,许多用户将至少50-60个模块下载到他们的设备中。

最近,我收到许多关于模块只是消失用户设备的抱怨,所以我做了一些调查,并在Apple的文档中遇到了以下措辞。

  

iOS将在必要时从Caches目录中删除您的文件,   因此,如果数据文件是,您的应用程序将需要优雅地降级   删除。

还有以下文章进一步解释了这种情况: http://iphoneincubator.com/blog/data-management/local-file-storage-in-ios-5

我的问题是,我没有实际降级优雅的方法,因为我无法自动让用户下载这么多模块。这可能需要数小时,具体取决于互联网连接和模块的大小。

所以我有几个问题:

  1. 你们有没有必要处理类似的情况,如果是的话,怎么办?
  2. 有没有人知道iOS何时清除缓存?什么被认为是“低空间”警告?这样我至少可以向用户发出警告,告知他没有足够的空间来安装新模块。
  3. 有没有办法在清除缓存文件夹之前收到某种警告?
  4. 这是Apple的一个非常令人沮丧的举动,我并没有真正看到出路。真的很想听听你的一些想法。

1 个答案:

答案 0 :(得分:9)

编辑:经过一些测试后,这似乎工作得很好并且不会被清除。

这尚未100%确认,但它在我们的基本测试中运行良好(我会发布更全面的结果)。似乎将数据保存到应用程序的“应用程序支持”文件夹可以解决这些问题,因为此文件夹未被清除。

docs州:

  

使用应用支持目录常量 NSApplicationSupportDirectory ,将<bundle_ID>附加到:   您的应用为用户创建和管理的资源和数据文件。您可以使用此目录存储应用程序状态信息,计算或下载的数据,甚至是代表用户/自动保存文件管理的用户创建的数据。

您可以按如下方式访问该文件夹(请注意,根据官方Apple文档的要求附加捆绑包ID):

[[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[[NSBundle mainBundle] bundleIdentifier]]

希望这对任何人都有帮助,正如我所说,我会在周末发布更全面的测试结果。

编辑2: 添加此行以防止从应用程序支持中同步临时内容非常重要。我在applicationDidFinishLaunching:

的最后使用它
[[NSURL URLWithString:NSApplicationSupportDir] setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil];