iOS面試題:SDWebImage實現原理是什么? 它是如何解決tableView的復用時出現圖片錯亂問題的呢?

解決tableView復用錯亂問題

  • 每次都會調UIImageView+WebCache文件中的 [self sd_cancelCurrentImageLoad];

原理解釋參考

SDWebImageDownloader

  • 圖片的下載操作放在一個NSOperationQueue并發(fā)操作隊列中,隊列默認最大并發(fā)數是6
  • 每個圖片對應一些回調(下載進度,完成回調等),回調信息會存在downloader的URLCallbacks(一個字典,key是url地址,value是圖片下載回調數組)中,URLCallbacks可能被多個線程訪問,所以downloader把下載任務放在一個barrierQueue中,并設置屏障保證同一時間只有一個線程訪問URLCallbacks。,在創(chuàng)建回調URLCallbacks的block中創(chuàng)建了一個NSOperation并添加到NSOperationQueue中
  • 下載的核心是利用NSURLSession加載數據,每個圖片的下載都有一個operation操作來完成,并將這些操作放到一個操作隊列中,這樣可以實現圖片的并發(fā)下載。
  • 內存緩存的處理由NSCache對象實現,NSCache類似一個集合的容器,它存儲key-value對,類似于nsdictionary類,我們通常使用緩存來臨時存儲短時間使用但創(chuàng)建昂貴的對象,重用這些對象可以優(yōu)化新能,同時這些對象對于程序來說不是緊要的,如果內存緊張就會自動釋放。
  • 先在內存中放置一份緩存,如果需要緩存到磁盤,將磁盤緩存操作作為一個task放到串行隊列中處理,會先檢查圖片格式是jpeg還是png,將其轉換為響應的圖片數據,最后吧數據寫入磁盤中(文件名是對key值做MD5后的串)。
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容