iOS學習筆記46——圖片非同步載入之SDWebImage

來源:互聯網
上載者:User

在開發中經常會遇到列表載入的功能,其中大部分都包括圖片列表載入,但行動裝置本身記憶體有限,而大量圖片載入又很耗記憶體。今天主要就介紹一個第三方圖片非同步載入庫SDWebImage,Github地址為:https://github.com/rs/SDWebImage,這個庫主要實現了為UIImageView添加一個類別方法,讓使用者使用圖片非同步載入就好像直接為UIImageView設定image一樣,使用非常方便。

一、主要功能

  • An UIImageView category adding web image and cache management to the Cocoa Touch framework
  • An asynchronous image downloader
  • An asynchronous memory + disk image caching with automatic cache expiration handling
  • Animated GIF support
  • WebP format support
  • A background image decompression
  • A guarantee that the same URL won't be downloaded several times
  • A guarantee that bogus URLs won't be retried again and again
  • A guarantee that main thread will never be blocked
  • Performances!
  • Use GCD and ARC

包括圖片非同步下載器、記憶體和本機快取、GIF支援、相同URL不會重複下載、不會阻塞UI線程等。


二、整合使用步驟

  • Download and unzip the last version of the framework from the download
    page(下載framwork包並解壓)
  • Right-click on the project navigator and select "Add Files to "Your Project":(右擊工程選擇添加庫到項目工程)
  • In the dialog, select SDWebImage.framework:(選擇SDWebImage.framwork庫)
  • Check the "Copy items into destination group's folder (if needed)" checkbox(選擇拷貝到工程複選框)
  • 添加ImageIO.framework庫支援
  • 添加Linker Flag,如


按下Command+B,編譯工程,如果編譯成功則說明整合成功了,如果出現framwork找不到的異常,則將工程目錄中SDWebImage-3.3.framwork改名為SDWebImage.framwork再編譯就沒問題了,由於我下的是最新3.3版本,可能原設定檔搜尋的編譯路徑名是不帶“-3.3”的,所以提一下這個問題。配置和編譯成功後就可以開始使用了:
三、Demo實現先看看最終實現的,主要實現了UITableView的列表載入和單個圖片的非同步載入: 
                         

在需要使用非同步圖片載入的標頭檔匯入:

#import <SDWebImage/UIImageView+WebCache.h>

列表實現在UITableView的協議方法中只需要很簡單的調用UIImageView的類別方法即可完成非同步載入:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *Identifier = @"UITableViewIdentifier";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier];    if (cell == nil) {        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Identifier];    }    NSInteger row = indexPath.row;    cell.textLabel.text = @"My Text";    [cell.imageView setImageWithURL:[arr_imgs objectAtIndex:row]];        return cell;}

單擊UITableView的item進入單個圖片載入頁面,使用SDWebImageDownloader載入:

//單獨非同步下載一個圖片    [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:self.imgURL] options:0 progress:^(NSUInteger receivedSize, long long expectedSize) {            } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {        if (image && finished) {            imageView.image = image;        }    }];

以上只給出關鍵代碼,具體Demo詳情請下載工程源碼:下載

加入我們的QQ群或公眾帳號請查看:Ryan's
zone公眾帳號及QQ群

同時歡迎關注我的新浪微博和我交流:@唐韌_Ryan


覺得這篇文章對你有用就頂我一下吧!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.