繁体   English   中英

缓存以存储图像并从存储的缓存中检索不起作用 - iOS Swift

[英]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具有相同的范围,因此一旦objectde-initialised ,缓存也将被释放。

在上面的实现中,缓存被声明为static因此它永远不会de-initialized但您可以随时使用以下内容清除缓存,

ImageCache.shared.removeAllObjects()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM