如何在iOS中获取未过期的缓存?

时间:2018-08-11 19:38:36

标签: ios swift caching

我正在使用缓存框架在应用程序中进行缓存。缓存框架可以为混合存储提供过期选项。我为两个存储(磁盘和内存)都设置了.never,但是缓存仍然可以过期。

在我的应用中,我需要永久存储一些Data(),并在必要时进行更新(但不经常进行更新)。获取此缓存的速度不是必需的。

可以使用此框架吗?我可以只使用DiskStorage而不是Storage吗?我认为它可以过期,因为它一直都保存到系统内存(我认为是RAM)中,因此iOS可以在需要时对其进行清理,但是iOS可以清理磁盘存储吗?

1 个答案:

答案 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准则,并且不会拒绝该应用。