1.先顯示placeholderimage(占位圖片),再根據URL來在本地查找圖片
2.從緩存中根據cachekey來查找圖片是否已經在緩存當中
3.如果緩存中已經有圖片緩存,進行回調并將圖片展示
4.如果內存中沒有該圖片的緩存,那么生成NSInvocationOperation添加到隊列,從硬盤中查找圖片是否已經被下載。
5.根據URLkey在硬盤緩存目錄下嘗試讀取圖片文件,這一步是在NSOperation在操作,所以要回到主線程進行結果回調。
6.如果上一步操作從硬盤中讀取到了圖片,那么將圖片添加到內存緩存中(如果空閑內存過小,會先清空內存緩存),然后進行回調展示圖片
7.如果從硬盤緩存目錄讀取不到圖片,那就說明所有的緩存中都不存在該圖片,那么需要下載圖片
8.共享或者創建一個下載器,開始下載圖片。
9.圖片下載由NSURLConnection來做,實現相關的delegate來判斷圖片的下載狀態,下載中、下載完成、下載失敗。
10利用imageIO做按圖片下載進度加載效果
11.數據下載完成后交給SDWebImageDecoder做圖片解碼處理。
12.圖片解碼處理在一個NSOperationQueue
完成,不會拖慢主線程的UI,所有如果有需要對下載的圖片進行二次處理時,最哈也在這里完成,效率會好很多。
13.當主線程中宣告解碼按成 之后,回調給下載器,下載器再回調給回調給 SDWebImageManager,告知圖片下載完成。
14.通知所有的下載器下載完成,回調給所需要的地方來進行圖片的展示。
15.將圖片保存到到SDImageCache中,內存緩存和硬盤緩存都要保存。
16.寫文件到硬盤在單獨的NSInvocationOperation中進行,避免拖慢主線程。