"do not back up"属性是否适用于'Library/Caches'中的数据



Apple的数据存储指南如下:

2)存储可再次下载或再生的数据

…还有(强调我的):

4)使用"不备份"属性来指定应该保留在设备上的文件,即使在低存储情况下。使用此属性使用可以重新创建但即使在低温度下也需要持久化的数据应用程序正常运行的存储环境客户希望它在离线使用期间可用。这个属性在标记文件上工作,不管它们在中的哪个目录。包括Documents目录。这些文件将不会被清除和不会包含在用户的iCloud或iTunes备份中。因为这些文件使用设备上的存储空间,你的应用负责用于定期监视和清除这些文件。

苹果链接到的关于这个主题的更详细讨论的页面没有提到任何关于该属性做任何事情来防止缓存数据被清除。

那么,有没有人知道"不备份"属性是否实际上像"不备份和不删除"一样工作,对于放置在/Library/Caches中的项目,或者如果文件仍然需要存储在应用程序的Documents目录中,以确保在设备空间不足时不删除它们?

我在iPhone 5 iOS 7.1.1上做了一个快速测试:

我把一些文件 "/Library/Caches " (NSCachesDirectory)和标记他们与NSURLIsExcludedFromBackupKey属性。然后我把更多的大文件按正常方式放到同一个目录下。

然后我用相机应用程序拍摄了一段很长的视频,发出了磁盘空间不足的警告。发出警告后,标记为"不备份"的文件没有从缓存中删除,但其他文件被删除了!因此,尽管这个属性的名字是这样的,但它确实在起作用,并做了两件不同的事情——排除备份和保留在低空间警告时不被清除。

对我来说很清楚,目录结构是我首先要遵循的,就像苹果公司说的那样。如果你既想保存文件又不想备份它,那就把它放在Documents中,最好放在你标记的文件夹中。

目前正在研究同样的问题,并且还假设添加该属性将防止文件在磁盘空间较低的情况下被清除(你知道,因为apple的文档确实这么说)。我想我应该用我的发现来更新这篇文章,因为这个公认的答案已经过去几年了。我有一个可以重新创建的数据库,它不包含用户生成的数据,因此我将其存储在缓存中,但其中包含一些可能影响应用程序正常运行的数据,因此我不希望在磁盘空间耗尽时清除它(当前正在发生并记录为错误)。我已经尝试过将NSURLIsExcludedFromBackupKey添加到文件本身,并且在清除发生后文件仍然被删除。所以从iOS 11.3开始,它似乎并不能阻止清除。不确定下一步是什么,因为我真的不想为所有用户移动数据库,但这可能是下一步,所以它在文档中是安全的。如果有人有不同的经历,请纠正我。

相关内容

最新更新