[英]Cache to store image and retrieve from stored Cache is not working - iOS Swift
我正在尝试下载图像并将该图像存储在缓存中。 从下一次尝试中,如果存在则从缓存中提取该图像,否则下载该图像
我已经通过类似的帖子但没有任何帮助我解决。
请指教
let imageCache = NSCache<NSString, UIImage>()
func getImage(from url: URL, completion: @escaping ((UIImage?, Error?)->(Void))) {
if let cachedImage = imageCache.object(forKey: url.absoluteString as NSString) {
print("Image from cache")
completion(cachedImage, nil)
}
NetworkOperations().downloadImage(from: url) { (data, error) in
if let error = error {
completion(nil, error)
} else if let imgData = data, let image = UIImage(data: imgData) {
self.imageCache.setObject(image, forKey: url.absoluteString as NSString)
print("Image from cache")
completion(image, nil)
}
}
}
当我调用这种方法时,它总是通过下载图像来选择。 我被打到了这里
在应用程序级别创建共享cache
,并在下面的任何位置添加/检索/删除,
class ImageCache {
private init() {}
static let shared = NSCache<NSString, UIImage>()
}
用法
func getImage(from url: URL, completion: @escaping ((UIImage?, Error?)->(Void))) {
if let cachedImage = ImageCache.shared.object(forKey: url.absoluteString as NSString) {
print("Image from cache")
completion(cachedImage, nil)
}
NetworkOperations().downloadImage(from: url) { (data, error) in
if let error = error {
completion(nil, error)
} else if let imgData = data, let image = UIImage(data: imgData) {
ImageCache.shared.setObject(image, forKey: url.absoluteString as NSString)
print("Image from cache")
completion(image, nil)
}
}
}
我希望,这将解决问题,它还应该让您了解实施的错误。 很可能你的缓存与声明和使用它的object
具有相同的范围,因此一旦object
被de-initialised
,缓存也将被释放。
在上面的实现中,缓存被声明为static
因此它永远不会de-initialized
但您可以随时使用以下内容清除缓存,
ImageCache.shared.removeAllObjects()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.