SDWebImage的常用方法

SDWebImage的常用方法

  1. 下載圖片并顯示

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

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

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

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

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

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

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

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

      • 進(jìn)度回調(diào)中可以監(jiān)聽到當(dāng)前的下載進(jìn)度, 可用于做一些指示性操作
      • 完成回調(diào)可以在圖片下載完畢之后, 執(zhí)行一些操作
    • options: 這個參數(shù)可以設(shè)置下載圖片的策略(對優(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) {
        // 下載完成后會自動回到主線程
            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)聽下載進(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類來下載

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

    • 注意這里的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圖片, 并且也會做緩存

    • 此方法為UIImage的分類

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

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

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

補充options的參數(shù):

  1. SDWebImageRetryFiled(失敗重試)
    • SDWebImage在默認(rèn)情況下, 如果某個URL失效無法下載, 那么SDWebImage就會將這個URL加入到一個黑名單中, 并且不會再次嘗試去下載
  2. SDWebImageLowPriority(低優(yōu)先級)
    • 在默認(rèn)情況下, 下載任務(wù)和UI交互之間, 是同時進(jìn)行的; 如果選擇這個設(shè)置, 那么系統(tǒng)會優(yōu)先進(jìn)行UI交互, 之后再去下載圖片
  3. SDWebImageCacheMemoryOnly(內(nèi)存緩存)
    • 對于下載的圖片, 只做內(nèi)存緩存, 不做磁盤緩存(適用于一次展示類的圖片)
  4. SDWebImageProgressiveDownload(漸進(jìn)式下載)
    • 默認(rèn)情況下, 圖片只有全部下載完成之后才可以顯示; 這個設(shè)置可以讓圖片漸變式顯示, 可以設(shè)置一些逐層刷新的效果
  5. SDWebImageRefreshCached(重新緩存)
    • 此選項一般很少用, 算是一個詭異但是比較高級的用法, 筆者從來沒用過.....
    • 該方法即使你的圖片已經(jīng)緩存到磁盤了, 但是還是會重新緩存圖片, 主要用做對同一個URL資源, 加載的可能是不同的圖片, 就需要使用此方法
  6. SDWebImageContinueInBackground(后臺加載)
    • 當(dāng)你的App退出到后臺時, 對于沒有下載完成的下載任務(wù), 會向系統(tǒng)額外請求一點時間繼續(xù)下載圖片, 但是如果系統(tǒng)分配的時間已到, 下載就會被取消.
    • 同上, 沒用過, 因為我們應(yīng)該盡量避免當(dāng)App進(jìn)入后臺也要耗費流量的情況
  7. SDWebImageHandleCookies(Cookies緩存)
    • 這個完全不知道怎么用, 應(yīng)該是瀏覽器App使用的選項吧
  8. SDWebImageAllowInvalidSSLCertificates(允許未信任的證書)
    • 可以在未被信任的證書網(wǎng)站中下載, 一般用于測試
  9. SDWebImageHighPriority(高優(yōu)先級)
    • 確保圖片在第一時間被加載, 移動到隊列最前方
    • 對于個別需要盡快展示給用戶的圖片, 使用此方法
  10. SDWebImageDelayPlaceholder(推遲占位圖片)
    • 默認(rèn)情況下, 會先顯示出占位圖片, 然后再去加載圖片
    • 此設(shè)置會先去加載圖片, 加載完畢后再顯示占位圖片(詭異的用法)
  11. SDWebImageTransformAnimatedImage(未使用過)
    • 沒用過這個設(shè)置, 并且SDWebImage也不推薦使用
  12. SDWebImageAvoidAutoSetImage(手動管理緩存)
    • 該設(shè)置會在加載圖片完畢后, 在completion回調(diào)方法中, 由開發(fā)者自行處理圖片緩存
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姨裸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子播玖,更是在濱河造成了極大的恐慌颜曾,老刑警劉巖往枷,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件更耻,死亡現(xiàn)場離奇詭異自沧,居然都是意外死亡纵柿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門衩茸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芹血,“玉大人,你說我怎么就攤上這事楞慈♂V颍” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵囊蓝,是天一觀的道長饿悬。 經(jīng)常有香客問我,道長聚霜,這世上最難降的妖魔是什么狡恬? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蝎宇,結(jié)果婚禮上弟劲,老公的妹妹穿的比我還像新娘。我一直安慰自己姥芥,他們只是感情好兔乞,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凉唐,像睡著了一般庸追。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上台囱,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天淡溯,我揣著相機(jī)與錄音,去河邊找鬼簿训。 笑死咱娶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的强品。 我是一名探鬼主播豺总,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼择懂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起另玖,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤困曙,失蹤者是張志新(化名)和其女友劉穎表伦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慷丽,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蹦哼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了要糊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纲熏。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锄俄,靈堂內(nèi)的尸體忽然破棺而出局劲,到底是詐尸還是另有隱情,我是刑警寧澤奶赠,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布鱼填,位于F島的核電站,受9級特大地震影響毅戈,放射性物質(zhì)發(fā)生泄漏苹丸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一苇经、第九天 我趴在偏房一處隱蔽的房頂上張望赘理。 院中可真熱鬧,春花似錦扇单、人聲如沸商模。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阻桅。三九已至,卻和暖如春兼都,著一層夾襖步出監(jiān)牢的瞬間嫂沉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工扮碧, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留趟章,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓慎王,卻偏偏與公主長得像蚓土,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赖淤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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