我之前寫過一篇部落格,介紹快取處理的三種方式,其中最難,最麻煩,最佔記憶體資源的還是快取,最近做的專案有大量的處理,還是採用了sdwebimage來處理,但是發現之前封裝好的**報錯了。研究發現,是我用了新版的sdwebimage,好多方法都變了。
第二步,在需要的地方匯入標頭檔案
#import "uiimageview+webcache.h"
第三步,呼叫sd_setimagewithurl:方法快取,注意,這就是新版本的新方法,舊方法是setimagewithurl:。下面將幾個方法都介紹一下。
1 sd_setimagewithurl:
//快取的基本**,就是這麼簡單
[self.image1 sd_setimagewithurl:imagepath1];
2 sd_setimagewithurl: completed:
//用block 可以在載入完成之後做些事情
[self.image2 sd_setimagewithurl:imagepath2 completed:^(uiimage *image, nserror *error, sdimagecachetype cachetype, nsurl *imageurl) ];
3 sd_setimagewithurl: placeholderimage:
//給一張預設,先使用預設,當載入完成後再替換
[self.image1 sd_setimagewithurl:imagepath1 placeholderimage:[uiimage imagenamed:@"
default
"]];
4 sd_setimagewithurl: placeholderimage: completed:
//使用預設,而且用block 在完成後做一些事情
[self.image1 sd_setimagewithurl:imagepath1 placeholderimage:[uiimage imagenamed:@"
default
"] completed:^(uiimage *image, nserror *error, sdimagecachetype cachetype, nsurl *imageurl) ];
5 sd_setimagewithurl: placeholderimage: options:
//options 選擇方式
[self.image1 sd_setimagewithurl:imagepath1 placeholderimage:[uiimage imagenamed:
@"default
"] options:sdwebimageretryfailed];
其他就不一一介紹了,oc是自文件語言,看方法名就知道幹什麼的了。除了帶options選項的方法,其他的方法都是綜合儲存,也就是記憶體快取和磁碟快取結合的方式,如果你只需要記憶體快取,那麼在options這裡選擇sdwebimagecachememoryonly就可以了。
如果不想深入了解,到這裡你已經可以用sdwebimage進行快取了,接下來我要解釋options的所有選項,以及sdwebimage內部執行流程。
一,options所有選項:
二,sdwebimage內部實現過程
入口 setimagewithurl:placeholderimage:options: 會先把 placeholderimage 顯示,然後 sdwebimagemanager 根據 url 開始處理。
先從記憶體快取查詢是否有,如果記憶體中已經有快取,sdimagecachedelegate ** imagecache:didfindimage:forkey:userinfo: 到 sdwebimagemanager。
sdwebimagemanagerdelegate ** webimagemanager:didfinishwithimage: 到 uiimageview+webcache 等前端展示。
如果記憶體快取中沒有,生成 nsinvocationoperation 新增到佇列開始從硬碟查詢是否已經快取。
根據 urlkey 在硬碟快取目錄下嘗試讀取檔案。這一步是在 nsoperation 進行的操作,所以回主線程進行結果** notifydelegate:。
如果上一操作從硬碟讀取到了,將新增到記憶體快取中(如果空閒記憶體過小,會先清空記憶體快取)。sdimagecachedelegate ** imagecache:didfindimage:forkey:userinfo:。進而**展示。
在主線程 notifydelegateonmainthreadwithinfo:宣告解碼完成,imagedecoder:didfinishdecodingimage:userinfo:**給 sdwebimage**********。
將儲存到 sdimagecache 中,記憶體快取和硬碟快取同時儲存。寫檔案到硬碟也在以單獨 nsinvocationoperation 完成,避免拖慢主線程。
sdimagecache 在初始化的時候會註冊一些訊息通知,在記憶體警告或退到後台的時候清理記憶體快取,應用結束的時候清理過期。
sdwi 也提供了 uibutton+webcache和 mkannotationview+webcache,方便使用。
//sdwebimagemanager *manager =[sdwebimagemanager sharedmanager];
[manager downloadimagewithurl:imagepath2 options:sdwebimageretryfailed progress:^(nsinteger receivedsize, nsinteger expectedsize) completed:^(uiimage *image, nserror *error, sdimagecachetype cachetype, bool finished, nsurl *imageurl) ];
對於初級來說,用sd_setimagewithurl:的若干個方法就可以實現很好的快取。
SDWebImage 最新版詳解
sdwebimage 詳解 如有不當的地方請大家多多提出寶貴的 意見 謝謝 今天先介紹下 類引用 剩下的會盡快補上 類引用有5個 分別是以下幾個 sdimagecache 非同步快取 inte ce tableviewcontroller 建立快取例項 cache sdimagecache allo...
SDWebImage 最新版詳解
今天先介紹下 類引用 剩下的會盡快補上 類引用有5個 分別是以下幾個 sdimagecache 非同步快取 objc view plain copy objc view plain copy objc view plain copy 清除磁碟中的快取 cachecleandisk 清除快取的儲存 c...
最新版SDWebImage的使用
第二步,在需要的地方匯入標頭檔案 import uiimageview webcache.h 第三步,呼叫sd setimagewithurl 方法快取,注意,這就是新版本的新方法,舊方法是setimagewithurl 下面將幾個方法都介紹一下。1.sd setimagewithurl 快取的基本...