簡體   English   中英

緩存下載的圖像:FileManager / CachePolicy / URLCache / NSCache?

[英]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.設置URLRequestcachePolicy屬性。

C.使用URLCache

D.使用NSCache

關於:

  1. 將圖像存儲為文件和使用緩存之間的實際區別是什么? 文件存儲可以提供緩存沒有的任何好處嗎? 這些圖像與用戶無關,我可以在需要時從服務器下載它們。

關於B:

  1. 我已經閱讀了Apple的文檔 ,但是我不完全了解我是否應該使用NSURLRequestUseProtocolCachePolicy
  2. 此選項實際上如何工作? 設置策略就足夠了,那么您不必關心其他任何事情了嗎? 現在要求下載圖像的URLRequest如何被下載和緩存?

關於C:

  1. 如何正確實施? 如果這是最好的方法,有人可以給我提供示例/教程嗎? 到期日期呢?

關於D:

  1. 我找到了一個我了解的示例,但是使用上述選項會是一個好方法嗎? 那這里的到期日呢?

總結:哪種選擇最適合我的情況,為什么?

根據我對您的問題的推斷, “我要避免下載已下載的圖像。我希望它們有一些到期時間。”

為了避免圖像再次下載,您可以實現以下用例,其中使用圖像本身的URL將圖像存儲在NSCache中。

就像鏈接中討論的那樣。

對於到期時間,如果要在特定的到期時間刪除所有映像,則只需檢查該情況並清空緩存。

對於要刪除單個映像的情況 ,可以根據它們的到期時間來檢查服務器對到期密鑰的響應,並在超出限制的情況下再次刪除緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM