应用程序被强制退出时,NSCache 是否会自动清空?
Does NSCache gets automatically emptied when the app is force quitted?
我正在下载一些图片并将它们保存在我的缓存中。到目前为止一切顺利,但是当退出我的应用程序并重新启动它时,缓存似乎是空的。我不知道如何检查缓存是否真的为空,这就是为什么我要问当应用程序被强制退出时缓存是否自动清空。
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 中使用此 class,如下所示:
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
}
更新
Sharjeel Ahmad 已经回答了这个问题。请参阅此 link 以供参考。
NSCache 不会将其元素保存到磁盘。它只会将它们保存在内存中。当一个应用程序被强制退出时,它的所有 RAM 都会被销毁,显然不能在下次启动时重新使用
我正在下载一些图片并将它们保存在我的缓存中。到目前为止一切顺利,但是当退出我的应用程序并重新启动它时,缓存似乎是空的。我不知道如何检查缓存是否真的为空,这就是为什么我要问当应用程序被强制退出时缓存是否自动清空。
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 中使用此 class,如下所示:
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
}
更新
Sharjeel Ahmad 已经回答了这个问题。请参阅此 link 以供参考。
NSCache 不会将其元素保存到磁盘。它只会将它们保存在内存中。当一个应用程序被强制退出时,它的所有 RAM 都会被销毁,显然不能在下次启动时重新使用