在我的应用程序中,我使用缓存框架进行缓存。缓存框架可以为混合存储提供过期选项。我已经为两个存储设置了.never (磁盘和内存),但是缓存仍然可能过期。
在我的应用程序中,我需要永远缓存一些Data(),并在必要时更新它(但不是经常)。获得这个缓存的速度并不是必要的。
可以使用这个框架吗?我可以只使用DiskStorage而不是Storage吗?我认为它可以过期,因为它可以一直保存到系统内存中(正如我认为的那样),所以iOS可以在需要时清理它,但是iOS可以清理磁盘存储吗?
发布于 2018-08-12 21:01:48
因此,我在苹果公司的指导方针中发现了这一点:
使用“不备份”属性指定应该保留在设备上的文件,即使在低存储情况下也是如此。使用此属性的数据可以重新创建,但即使在较低的存储情况下,也需要持久化才能使应用程序正常运行,或者因为客户希望在脱机使用期间可以使用该属性。该属性用于标记文件,而不管它们位于哪个目录,包括文档目录。这些文件不会被清除,也不会包含在用户的iCloud或iTunes备份中。因为这些文件确实使用设备上的存储空间,所以您的应用程序负责定期监视和清除这些文件。
我为此编写了一个简单的函数:
func setExludedFromBackup() {
var url = try? FileManager.default.url(
for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true).appendingPathComponent("MyFolder")
var resuorceValues = URLResourceValues()
resuorceValues.isExcludedFromBackup = true
try? url?.setResourceValues(resuorceValues)
// print(try? url?.resourceValues(forKeys: [.isExcludedFromBackupKey]).isExcludedFromBackup)
// you can check if your directory excluded from backup (it excluded if "Optional(Optional(true))" printed)
}是的,它是“文档”文件夹,因为其他文件夹仍在继续清除。
您只需在某个地方调用这个func (我使用了AppDelegate),并在调用它之前检查目录是否已经排除在备份之外。这样可以防止文档目录中的"MyFolder“被删除,如果iOS内存用完了!因此,只要我愿意,我的数据就能得到。,但是您也必须包括事后删除机制,因为这些数据永远不会被自动删除,并且设备上的内存空间也不会被释放。
我不知道苹果会对此做出什么反应,在检查你的应用程序的AppStore时,告诉他们你的应用程序的离线使用情况,以及你对文档文件夹做了什么,别忘了描述你的删除机制。我希望这不会破坏苹果的指导方针和应用程序不会被拒绝。
https://stackoverflow.com/questions/51803131
复制相似问题