当应用程序被强制退出时,NSCache 会自动清空吗?



我正在下载一些图像并将它们保存在缓存中。到目前为止一切顺利,但是当退出我的应用程序并重新启动它时,缓存似乎是空的。我不知道如何检查缓存是否实际上是空的,这就是为什么我问当应用程序被强制退出时缓存是否自动清空。

let cache = NSCache<NSString, UIImage>() // cache for the downloaded images

是的,它这样做了,出于某种原因,即使没有内存压力,当应用程序进入后台时,它会立即从缓存中删除数据。要解决此问题,您必须告诉NSCache您的数据不应被丢弃。

你可以做的是这样的:

class ImageCache: NSObject , NSDiscardableContent {
public var image: UIImage!
func beginContentAccess() -> Bool {
return true
}
func endContentAccess() {
}
func discardContentIfPossible() {
}
func isContentDiscarded() -> Bool {
return false
}
}

然后在NSCache中使用此类,如下所示:

let cache = NSCache<NSString, ImageCache>()

之后,您必须设置之前缓存的数据:

let cacheImage = ImageCache()
cacheImage.image = imageDownloaded
self.cache.setObject(cacheImage, forKey: "yourCustomKey" as NSString)

最后检索数据:

if let cachedVersion = cache.object(forKey: "yourCustomKey") {
youImageView.image = cachedVersion.image
}
>更新

沙吉尔·艾哈迈德已经回答了这个问题。请参阅此链接以供参考。

NSCache 不会将其元素持久化到磁盘上。它只将它们保留在内存中。当应用程序被强制退出时,其所有RAM都会被破坏,并且显然无法在下次启动时重复使用

最新更新