SDWebImage的常用方法

SDWebImage的常用方法

  1. 下載圖片并顯示

    • 同時做內(nèi)存緩存和磁盤緩存

    • 圖片加載結(jié)束之后, 在本地磁盤緩存會對圖片名稱進行一次MD5加密

    • 再圖片加載完成之前, 可以使用placeholder來作為占位圖片: 目前APP通用的方法

    • 弊端: 如果加載過多的圖片, 會占用過多的內(nèi)存, 因此要監(jiān)聽當前內(nèi)存, 當內(nèi)存占用過多主動釋放

        [self.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"baiduIcon.png""]];
      
  2. 下載圖片并計算下載進度

    • 使用UIImageView的分類下載, 下載后會自動設(shè)置給UIIMageView

    • 同時做內(nèi)存緩存和磁盤緩存

    • 添加了進度回調(diào)完成回調(diào)

      • 進度回調(diào)中可以監(jiān)聽到當前的下載進度, 可用于做一些指示性操作
      • 完成回調(diào)可以在圖片下載完畢之后, 執(zhí)行一些操作
    • options: 這個參數(shù)可以設(shè)置下載圖片的策略(對優(yōu)化程序很重要), 在下面詳細介紹

        [self.imageView sd_setImageWithURL:url  placeholderImage:[UIImage imageNamed:@"baiduIcon.png"] options:SDWebImageProgressiveDownload progress:^(NSInteger receivedSize, NSInteger expectedSize) {
            // receivedSize: 已經(jīng)下載的數(shù)據(jù)的大小
            // expectedSize: 圖片的總大小
            NSLog(@"%f",1.0 * receivedSize/expectedSize);
      
        } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        // 下載完成后會自動回到主線程
            NSLog(@"%@",[NSThread currentThread]);
            switch (cacheType) {
                case SDImageCacheTypeNone:
                    NSLog(@"直接下載, 不做緩存");
                    break;
                case SDImageCacheTypeDisk:
                    NSLog(@"磁盤緩存");
                    break;
                case SDImageCacheTypeMemory:
                    NSLog(@"內(nèi)存緩存");
                    break;
                default:
                    break;
            }
        }];
      

      }

  3. 使用SDWebImageManager單例下載

    • 同時做內(nèi)存緩存和圖片緩存

    • 可以監(jiān)聽下載進度

    • 下載圖片后需要在Block回調(diào)中自行設(shè)置圖片

        [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"http://www.baidubg.jpg"]
                                                       options:0
                                                       progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                                                           NSLog(@"%f", 1.0 * receivedSize / expectedSize);
                                                       }
                                                       completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                                                           // 設(shè)置圖片
                                                           NSLog(@"%@", [NSThread currentThread]);
                                                           self.imageView.image = image;
                                                           NSLog(@"%@", [NSThread currentThread]);
                                                       }];
      
  4. 使用SDWebImageDownloader類來下載

    • downloader類, 只負責下載圖片, 并不會去做任何的緩存

    • 注意這里的Block回調(diào), 是在子線程中進行的

        [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:@"http://www.baidubg.jpg"]
                                                             options:0
                                                             progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                                                                 NSLog(@"%f", 1.0 * receivedSize / expectedSize);
                                                             }
                                                             completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                                                                 
                                                                 // 回到主線程中設(shè)置圖片
                                                                 dispatch_async(dispatch_get_main_queue(), ^{
                                                                     self.imageView.image = image;
                                                                 });
                                                             }];
      
  5. 加載GIF圖片的方法

    • 該方法專用于加載GIF圖片, 并且也會做緩存

    • 此方法為UIImage的分類

    • 注意他會對過大的圖片進行一次壓縮處理

    • 平時使用sd_setImgae..方法也可以加載GIF圖片

        self.imageView.image = [UIImage sd_animatedGIFNamed:@"test"];
      

補充options的參數(shù):

  1. SDWebImageRetryFiled(失敗重試)
    • SDWebImage在默認情況下, 如果某個URL失效無法下載, 那么SDWebImage就會將這個URL加入到一個黑名單中, 并且不會再次嘗試去下載
  2. SDWebImageLowPriority(低優(yōu)先級)
    • 在默認情況下, 下載任務(wù)和UI交互之間, 是同時進行的; 如果選擇這個設(shè)置, 那么系統(tǒng)會優(yōu)先進行UI交互, 之后再去下載圖片
  3. SDWebImageCacheMemoryOnly(內(nèi)存緩存)
    • 對于下載的圖片, 只做內(nèi)存緩存, 不做磁盤緩存(適用于一次展示類的圖片)
  4. SDWebImageProgressiveDownload(漸進式下載)
    • 默認情況下, 圖片只有全部下載完成之后才可以顯示; 這個設(shè)置可以讓圖片漸變式顯示, 可以設(shè)置一些逐層刷新的效果
  5. SDWebImageRefreshCached(重新緩存)
    • 此選項一般很少用, 算是一個詭異但是比較高級的用法, 筆者從來沒用過.....
    • 該方法即使你的圖片已經(jīng)緩存到磁盤了, 但是還是會重新緩存圖片, 主要用做對同一個URL資源, 加載的可能是不同的圖片, 就需要使用此方法
  6. SDWebImageContinueInBackground(后臺加載)
    • 當你的App退出到后臺時, 對于沒有下載完成的下載任務(wù), 會向系統(tǒng)額外請求一點時間繼續(xù)下載圖片, 但是如果系統(tǒng)分配的時間已到, 下載就會被取消.
    • 同上, 沒用過, 因為我們應(yīng)該盡量避免當App進入后臺也要耗費流量的情況
  7. SDWebImageHandleCookies(Cookies緩存)
    • 這個完全不知道怎么用, 應(yīng)該是瀏覽器App使用的選項吧
  8. SDWebImageAllowInvalidSSLCertificates(允許未信任的證書)
    • 可以在未被信任的證書網(wǎng)站中下載, 一般用于測試
  9. SDWebImageHighPriority(高優(yōu)先級)
    • 確保圖片在第一時間被加載, 移動到隊列最前方
    • 對于個別需要盡快展示給用戶的圖片, 使用此方法
  10. SDWebImageDelayPlaceholder(推遲占位圖片)
    • 默認情況下, 會先顯示出占位圖片, 然后再去加載圖片
    • 此設(shè)置會先去加載圖片, 加載完畢后再顯示占位圖片(詭異的用法)
  11. SDWebImageTransformAnimatedImage(未使用過)
    • 沒用過這個設(shè)置, 并且SDWebImage也不推薦使用
  12. SDWebImageAvoidAutoSetImage(手動管理緩存)
    • 該設(shè)置會在加載圖片完畢后, 在completion回調(diào)方法中, 由開發(fā)者自行處理圖片緩存
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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