簡體   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