iOS中網路圖片的下載
1. SDWebImage的簡單介紹
a) SDWebImage支援非同步圖片下載+快取,提供了UIImageView+WebCacha的分類,方便使用。
b) 圖片檔案快取的時間最長是1周
c) 記憶體快取使用的是NSCache
d) 最大併發數是6,可以經過屬性調整
e) 支援GIF
f) 快取圖片的名稱使用MD5雜湊函式,對url進行md5,結果是32個字元長度的字串。
g) 接收到記憶體警告怎麼處理
i. 接收到記憶體警告通知執行clearMemory方法,清理記憶體快取
ii. 接收到應用程式將要終止通知,執行clearDisk方法,清理磁碟快取,將快取的資料夾直接刪除,重新建立新的緩 存資料夾。
iii. 接收到進入後臺通知,執行backgroundCleanDisk方法,後臺清理磁碟
2. SDWebImage的底層原理
a) 從分類入口setImageWithURL,會先把展點陣圖顯示出來
b) 然後進入SDWebImageManage管理類,交給SDImageCache從快取中查詢圖片是否已經下載
c) 先從記憶體圖片快取中查詢是否有圖片,找到有快取就把圖片回傳到管理類在回傳到分類入口顯示
d) 如果記憶體中沒有該圖片的快取,生成操作新增到佇列從磁碟查詢圖片檔案
e) 根據url的md5字串,查詢磁碟快取圖片,如果找到則回主執行緒進行結果的回撥,新增到記憶體快取中(空閒記憶體過小,會先清 空記憶體快取)
f) 如果磁碟沒有讀取到圖片,說明所有快取都沒有該圖片,則需要回調到管理類,生成下載管理器下載圖片
g) 下載圖片是又NSURLConnetction來做,實現了相關的代理判斷圖片下載狀態和下載進度。
h) 圖片資料下載完成後,會交給SDWebImageDecoder做圖片解碼處理,這裡是一個佇列操作,不會拖慢主執行緒
i) 解碼完成,會到管理類,進行圖片的快取到記憶體和磁碟的操作,最終回到分類顯示出圖片
j) 在SDWebCache初始化的時候,會註冊訊息通知,在記憶體警告和後臺的時候清理記憶體快取,應用結束的時候清理過期的圖 片。
3. SDWebImage庫的作用:
a) UIImageView(WebCache)分類,入口封裝
b) SDWebImageManager 對圖片的管理中繼站,向下呼叫快取(SDWebCache)和網路下載(SDWebImageDownloader)操作,已接響應他們的回撥
c) SDImageCache根據url進行了記憶體和磁碟的兩種儲存和讀取操作,以及一些快取的清理操作
d) SDWebImageDownloader根據URL向網路下載圖片資料等操作
e) SDWebImageDecoder,非同步對圖片進行一次解壓,能夠提高效率。
4. SDWebImage怎麼封裝
a) 在UIImageView分類封裝2個方法,下載圖片的方法和佔位圖的
b) 常用的還有封裝一個回撥下載圖片狀態和進度的《下載成功,下載失敗,下載進度》
5. SDWebImage和YYWebImage對Gif圖片展示的記憶體、CPU使用分析
a) SDWebImage記憶體暴漲,CPU佔用低
b) YYWebImage記憶體低了,CPU居高不下
c) SDWebImage是把GIF所有的圖片都先載入到記憶體中,通過animatedImageWithImages的方式播放動畫。這樣的好處就是,播放時直接從記憶體中讀取資源就好了。典型的以空間換取流暢度
d) YYWebImage的處理方式正好相反,讀取Gif需要展示的當前image,進行解析展示,不用為gif的每一張圖片開闢空間,每次都是讀取一張image就好了。以速度換空間。
e) 後期YYWebImage好像解決了這個cpu高佔用的問題,使用了一個自定義的UIImageView ,YYAnimatedImageView來播放GIF
f) 具體使用哪個,就需要根據不同的業務需求進行決定了