[英]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.