SDWebImage的常用方法

SDWebImage的常用方法

  1. 下載圖片并顯示

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

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

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

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

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

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

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

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

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

        [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) {
        // 下載完成后會(huì)自動(dòng)回到主線程
            NSLog(@"%@",[NSThread currentThread]);
            switch (cacheType) {
                case SDImageCacheTypeNone:
                    NSLog(@"直接下載, 不做緩存");
                    break;
                case SDImageCacheTypeDisk:
                    NSLog(@"磁盤緩存");
                    break;
                case SDImageCacheTypeMemory:
                    NSLog(@"內(nèi)存緩存");
                    break;
                default:
                    break;
            }
        }];
      

      }

  3. 使用SDWebImageManager單例下載

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

    • 可以監(jiān)聽下載進(jì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類來(lái)下載

    • downloader類, 只負(fù)責(zé)下載圖片, 并不會(huì)去做任何的緩存

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

        [[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圖片, 并且也會(huì)做緩存

    • 此方法為UIImage的分類

    • 注意他會(huì)對(duì)過(guò)大的圖片進(jìn)行一次壓縮處理

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

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

補(bǔ)充options的參數(shù):

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

推薦閱讀更多精彩內(nèi)容