這篇文章將為大家詳細講解有關iOS圖片加載框架SDWebImage的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
扎賚特ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
目的
在使用SDWebImage加載圖片時,尤其是加載gif等大圖時,SDWebImage會將圖片緩存在內(nèi)存中,這樣是非常吃內(nèi)存的,這時我們就需要在適當?shù)臅r候去釋放一下SDWebImage的內(nèi)存緩存,才不至于造成APP閃退。
SDWebImage 提供了 UIImageView、UIButton 、MKAnnotationView 的圖片下載分類,只要一行代碼就可以實現(xiàn)圖片異步下載和緩存功能。
這樣開發(fā)者就無須花太多精力在圖片下載細節(jié)上,專心處理業(yè)務邏輯。
SDWebImage 特點
提供 UIImageView, UIButton, MKAnnotationView 的分類,用來顯示網(wǎng)絡圖片,以及緩存管理
異步下載圖片
異步緩存(內(nèi)存+磁盤),并且自動管理緩存有效性
后臺圖片解壓縮
同一個 URL 不會重復下載
自動識別無效 URL,不會反復重試
不阻塞主線程
高性能
使用 GCD 和 ARC
支持多種圖片格式(包括 WebP 格式)
支持動圖(GIF)
4.0 之前的動圖效果并不是太好
4.0 以后基于 FLAnimatedImage加載動圖
注:本文選讀的代碼是 3.7.3 版本的,所以動圖加載還不支持 FLAnimatedImage。
SDWebImage 使用
1. UITableView 中使用 UIImageView+WebCache
復制代碼 代碼如下:
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
2. 使用回調(diào) blocks
在 block 中得到圖片下載進度和圖片加載完成(下載完成或者讀取緩存)的回調(diào),如果你在圖片加載完成前取消了請求操作,就不會收到成功或失敗的回調(diào)
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { ... completion code here ... }];
3. SDWebImageManager 的使用
UIImageView(WebCache) 分類的核心在于 SDWebImageManager 的下載和緩存處理,SDWebImageManager將圖片下載和圖片緩存組合起來了。SDWebImageManager也可以單獨使用。
SDWebImageManager *manager = [SDWebImageManager sharedManager]; [manager loadImageWithURL:imageURL options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { // progression tracking code } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { if (image) { // do something with image } }];
4. 單獨使用 SDWebImageDownloader 異步下載圖片
我們還可以單獨使用 SDWebImageDownloader 來下載圖片,但是圖片內(nèi)容不會緩存。
SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader]; [downloader downloadImageWithURL:imageURL options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { // progression tracking code } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { if (image && finished) { // do something with image } }];
5. 單獨使用 SDImageCache 異步緩存圖片
SDImageCache 支持內(nèi)存緩存和異步的磁盤緩存(可選),如果你想單獨使用 SDImageCache 來緩存數(shù)據(jù)的話,可以使用單例,也可以創(chuàng)建一個有獨立命名空間的 SDImageCache 實例。
添加緩存的方法:
[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];
默認情況下,圖片數(shù)據(jù)會同時緩存到內(nèi)存和磁盤中,如果你想只要內(nèi)存緩存的話,可以使用下面的方法:
[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey toDisk:NO];
讀取緩存時可以使用 queryDiskCacheForKey:done: 方法,圖片緩存的 key 是唯一的,通常就是圖片的 absolute URL。
SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"]; [imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) { // image is not nil if image was found }];
6. 自定義緩存 key
有時候,一張圖片的 URL 中的一部分可能是動態(tài)變化的(比如獲取權限上的限制),所以我們只需要把 URL 中不變的部分作為緩存用的 key。
SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) { url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; return [url absoluteString]; };
常見問題
問題 1:使用 UITableViewCell 中的 imageView 加載不同尺寸的網(wǎng)絡圖片時會出現(xiàn)尺寸縮放問題。
解決方案:
自定義 UITableViewCell,重寫 -layoutSubviews 方法,調(diào)整位置尺寸;
或者直接棄用 UITableViewCell 的 imageView,自己添加一個 imageView 作為子控件。
問題 2:圖片刷新問題:SDWebImage 在進行緩存時忽略了所有服務器返回的 caching control 設置,并且在緩存時沒有做時間限制,這也就意味著圖片 URL 必須是靜態(tài)的了,要求服務器上一個 URL 對應的圖片內(nèi)容不允許更新。但是如果存儲圖片的服務器不由自己控制,也就是說 圖片內(nèi)容更新了,URL 卻沒有更新,這種情況怎么辦?
解決方案:在調(diào)用 sd_setImageWithURL: placeholderImage: options:方法時設置 options 參數(shù)為 SDWebImageRefreshCached,這樣雖然會降低性能,但是下載圖片時會照顧到服務器返回的 caching control。
問題 3:在加載圖片時,如何添加默認的 progress indicator ?
解決方案:在調(diào)用 -sd_setImageWithURL:方法之前,先調(diào)用下面的方法:
[imageView sd_setShowActivityIndicatorView:YES]; [imageView sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray]; ```
關于“iOS圖片加載框架SDWebImage的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
文章標題:iOS圖片加載框架SDWebImage的示例分析
標題鏈接:http://aaarwkj.com/article24/iidsce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站內(nèi)鏈、營銷型網(wǎng)站建設、手機網(wǎng)站建設、網(wǎng)站策劃、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)