第一步構(gòu)造圖片下載的類WYWebImageManager
1.構(gòu)造下載方法

2.內(nèi)存中拿到圖片

3.從磁盤中獲取數(shù)據(jù)
3.1判斷當前任務是否在下載避免重復下載

3.2自定義NSOperation下載當然SD 用的是NSURLSession 我這里為了方便就沒這樣,以后有時間我在繼續(xù)改

我來解釋下handdict為什么要這樣寫,如果看不懂和我交流

第二步自定義WYWebImageDownLoadOperation
2.1重載start方法
重載父類的方法,但是在ios4以后,不管是并發(fā)還是非并發(fā),隊列都會為operation提供一個線程來執(zhí)行。所以isConcurrent這個變量也就沒有用處了。但是,這里還設涉及到了兩個方法,start和main.按照官方文檔所說,如果是非并發(fā)就使用main,并發(fā)就使用start。
那現(xiàn)在并發(fā)和非并發(fā)已經(jīng)沒有區(qū)別了,start和main的區(qū)別在哪里呢?
main方法的話,如果main方法執(zhí)行完畢,那么整個operation就會從隊列中被移除。如果你是一個自定義的operation并且它是某些類的代理,這些類恰好有異步方法,這是就會找不到代理導致程序出錯了。
然而start方法就算執(zhí)行完畢,它的finish屬性也不會變,因此你可以控制這個operation的生命周期了。
然后在任務完成之后手動cancel掉這個operation即可。
具體實現(xiàn)

鎖采用的是信號量,較早的sd版本的有@synchronized,后來改成了信號量,信號量在不涉及到磁盤讀寫的時候性能非常高,
2.操作任務


重載父類的屬性

1.將KVO改成手動關閉自動,保證不會被隨意調(diào)用

第三步UIImageView+WYWebCache
1.為外界提供下載方法
if (self.wy_urlString && self.wy_urlString.length>0 && ![self.wy_urlString isEqualToString:urlString])

第4步外界調(diào)用

這就是仿照SDWebImage的實現(xiàn)圖片下載的思路
其他
1處理內(nèi)存警告

2.加載圖片路徑

與SD不同的是SD用實在NSCache里面創(chuàng)建了一個Default文件夾管理自己下載的圖片,這樣話不會影響到我們的app 其他放在Cache的文件
3.清理內(nèi)存
