我正在使用缓存框架在应用程序中进行缓存。缓存框架可以为混合存储提供过期选项。我为两个存储(磁盘和内存)都设置了.never
,但是缓存仍然可以过期。
在我的应用中,我需要永久存储一些Data()
,并在必要时进行更新(但不经常进行更新)。获取此缓存的速度不是必需的。
可以使用此框架吗?我可以只使用DiskStorage
而不是Storage
吗?我认为它可以过期,因为它一直都保存到系统内存(我认为是RAM)中,因此iOS可以在需要时对其进行清理,但是iOS可以清理磁盘存储吗?
答案 0 :(得分:1)
因此,我在Apple指南中找到了有关此内容的信息:
使用“不备份”属性来指定应 即使在存储空间不足的情况下也可以保留在设备上。使用这个属性 可以重新创建但仍需要持久保存的数据 应用程序正常运行的存储情况或 客户希望它可以在脱机使用期间使用。这个属性 不论标记文件在哪个目录中,都可以使用, 包括文档目录。这些文件将不会被清除,并且 不会包含在用户的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)
}
是的,它是Documents文件夹,因为其他文件夹仍继续被清除。
您只需在某个地方调用此函数(我使用过AppDelegate),然后在调用目录之前检查目录是否已从备份中排除。如果iOS内存不足,可以防止删除Documents目录中的“ MyFolder”!因此,只要我愿意,我的数据将可用。 但是您还必须包括超时删除机制,因为该数据将永远不会被自动删除并且不会释放设备上的内存空间。在我的情况下,我只是使用了Cache框架的expiry
财产
P.S。我不确定Apple在检查您的应用程序是否有AppStore时会如何反应,因此请告诉他们有关您的应用程序中的脱机使用情况以及您对documents文件夹所做的操作,不要忘记描述您的删除机制。我希望这不会违反Apple准则,并且不会拒绝该应用。