SDWebimage(1)

weixin_34234823發表於2016-05-24

sd_setImageWithURL:placeholderImage:options:progress:completed:
這個是最核心的呼叫方法,placeholderImage:options:progress:completed 這幾個引數都是可以不要的.
SDWebImageOptions可以傳入多個引數
SDWebImageRetryFailed 預設失敗的url被記錄,下次就不在下載,這個option會繼續下載. SDWebImageLowPriority 預設UI互動的時候開始下載,這個option會延後下載,等UIScrollView減速後 SDWebImageCacheMemoryOnly 只混存,不存入磁碟 SDWebImageProgressiveDownload 預設圖片下載完成才顯示一次,這個option是顯示漸進式下載,邊下邊顯示的. SDWebImageRefreshCached 重新整理快取,相同的url,還是會重新下載 SDWebImageContinueInBackground 後臺下載 SDWebImageHandleCookies NSMutableURLRequest.HTTPShouldHandleCookies = YES SDWebImageAllowInvalidSSLCertificates 允許使用未信任的證書,一般用於測試,生成模式時需要注意 SDWebImageHighPriority 優先下載 SDWebImageDelayPlaceholder 延遲佔點陣圖,預設是下載過程中就用佔點陣圖,這個會等下載完成之後. SDWebImageTransformAnimatedImage 改變動畫形象,但是需要自己去實現代理方法 SDWebImageAvoidAutoSetImage 得到圖片之後不會立即設定imageView,你需要自己操作。
progress與completed是兩個block
progress:^(NSInteger receivedSize, NSInteger expectedSize) completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL)
根據回傳的東西可以做自己想要的操作,比如進度條顯示,比如完成之後做個什麼顯示之類的。
sd_cancelCurrentImageLoad
取消當前的下載
利用runtime,objc_setAssociatedObject給imageUrl賦值
如果是延遲佔點陣圖 就先設定imageView的image
然後判斷url是否為空 當為空的時候 直接呼叫completedBlock
不為空就先看ActivityIndicatorView是否show,這個應該是在呼叫sd_setImageWithURL之前就對imageView設定了的
呼叫@selector(downloadImageWithURL:options:progress:completed:)建立SDWebImageCombinedOperation例項,completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) 裡則是根據獲取圖片重新整理介面的操作
@selector(downloadImageWithURL:options:progress:completed:)方法中先在快取中讀取圖片,未讀到就到磁碟中去讀取。這裡就又要根據option看程式碼怎麼走了。就可能出現如果是之前呼叫的url並未獲取到圖片,則不再請求,獲取取到了圖片,就直接讀取快取,也不請求了。還有失敗的url是否儲存。然後 @selector(downloadImageWithURL:options:progress:completed:)建立Operation新增到queue裡開始執行. 根據connection的調的代理方法回撥block,執行block裡面的程式碼,當error的時候把url加入到self.failedURLs,根據option來決定是否移除url或者儲存image方式。同時也傳送了通知開始下載,正在接受資料,停止下載,完成下載,但是發現監聽呼叫的是 動態載入的例項方法,而且只有ActivityIndicator的show和stop.並沒有全運用起來

大致看了看整個流程,SDWebimage高度封裝 使用起來十分方便,大概流程看到的就是這樣吧,更細節的地方下次再來看。注意SDWebImageOptions的選擇。

另外有一個收穫是看SDWebImageContinueInBackground發現的,進入後臺之後還可以執行程式碼,可以呼叫UIApplication的beginBackgroundTaskWithExpirationHandler:例項方法,來向iOS 借點時間這個就單獨再記錄一篇。

相關文章