[英]Caching downloaded images: FileManager / CachePolicy / URLCache / NSCache?
我需要實現具有N個單元格的表格視圖的常見方案,其中每個單元格都需要下載要在其中顯示的圖像。
調用下載圖像的服務協議可以是HTTP或HTTPS。
我通過這種方式使用URLSessionDownloadTask
:
func downloadImage(urlStr: String, completion: @escaping (UIImage?, Error?) -> Void) {
let url = URL(string: urlStr)
let request = URLRequest(url: url!)
let task = session.downloadTask(with: request, completionHandler: {
(fileUrl, response, error) in
// Call 'completion' depending on result
})
task.resume()
}
其中session
是具有默認配置和關聯的操作隊列的URLSession
:
self.session = URLSession(configuration: configuration, delegate: nil, delegateQueue: self.operationQueue)
因此,我要避免下載已下載的圖像。 我希望他們有一些到期時間。
我已經閱讀了一些文章和帖子,但是我對所發現的選項之間的差異還不太清楚:
FileManager
:使用FileManager
實際將圖像存儲為文件,並在檢查到期時間后將其刪除。
B.設置URLRequest
的cachePolicy
屬性。
C.使用URLCache
D.使用NSCache
關於:
關於B:
NSURLRequestUseProtocolCachePolicy
。 URLRequest
如何被下載和緩存? 關於C:
關於D:
總結:哪種選擇最適合我的情況,為什么?
根據我對您的問題的推斷, “我要避免下載已下載的圖像。我希望它們有一些到期時間。”
為了避免圖像再次下載,您可以實現以下用例,其中使用圖像本身的URL將圖像存儲在NSCache中。
就像鏈接中討論的那樣。
對於到期時間,如果要在特定的到期時間刪除所有映像,則只需檢查該情況並清空緩存。
對於要刪除單個映像的情況 ,可以根據它們的到期時間來檢查服務器對到期密鑰的響應,並在超出限制的情況下再次刪除緩存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.