仿照SDWebImage實現(xiàn)圖片下載思路

第一步構(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)存


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容