Apple的data storage guidelines声明如下:
2)应存储可以再次下载或重新生成的数据 在/ Library / Caches目录中。
...和(强调我的):
4)使用“不备份”属性来指定应保留在设备上的文件,即使在低存储情况下也是如此。使用此属性 数据可以重新创建,但即使在低位也需要持久化 应用程序正常运行的存储情况或因为 客户希望在离线使用时可以使用它。 此属性 适用于标记文件,无论它们在哪个目录, 包括Documents目录。 这些文件不会被清除和 不会包含在用户的iCloud或iTunes备份中。因为 这些文件确实使用设备上的存储空间,您的应用程序负责 用于定期监视和清除这些文件。
Apple链接到该主题的detailed discussion更多的页面没有提及任何有关阻止缓存数据被清除的属性的事情。
所以有人知道“不备份”属性是否实际上对/Library/Caches
中放置的项目“不备份和不删除”有效,或者文件是否仍需要存储在应用程序内部Documents
目录,以确保在设备空间不足时不删除它们?
答案 0 :(得分:4)
我已经在iPhone 5 iOS 7.1.1上进行了快速测试:
我将一些文件放到“/ Library / Caches”(NSCachesDirectory
)并用NSURLIsExcludedFromBackupKey
属性标记它们。然后我以正常方式将更多大文件放到同一目录中。
然后我通过使用相机应用拍摄长视频来制作低磁盘空间警告。 警告之后,标记为“不备份”的文件未从缓存中删除,但其他文件是!因此,这个属性确实起作用,并且尽管它的名称也做了两件不同的事情 - 从备份中排除并保留在低空间警告时被清除。
答案 1 :(得分:0)
对我而言,这是非常明确的,目录结构是我首先要遵循的,正如Apple所说的那样。如果您既想保存文件而不备份文件,请将其放在文档中,最好放在您标记的文件夹中。
即使您今天使用Caches观察到某些行为,它可能会在将来发生变化。
答案 2 :(得分:0)
目前正在研究同样的问题,并假设添加该属性将阻止文件在低磁盘空间场景中被清除(你知道,因为苹果公司的文档确实说明了这一点)。我想我会用我的发现来更新这个,因为它已经接受了几年的答案。我有一个可以重新创建并且不包含用户生成的数据的数据库,因此我将其存储在缓存中,但包含一些可能影响应用程序正常运行的数据,所以我不希望它在运行时被清除磁盘空间不足(当前正在发生并记录为错误)。我已经尝试将NSURLIsExcludedFromBackupKey
添加到文件本身,并且在清除发生后文件仍然被删除。所以它似乎并没有像iOS 11.3那样阻止清除。不确定下一步是什么,因为我真的不想为所有用户移动数据库,但这可能是下一步,因此它在文档中是安全的。如果有人有不同的经历,请纠正我。