在開發中經常會遇到列表載入的功能,其中大部分都包括圖片列表載入,但行動裝置本身記憶體有限,而大量圖片載入又很耗記憶體。今天主要就介紹一個第三方圖片非同步載入庫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
覺得這篇文章對你有用就頂我一下吧!