亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS 圖片加載框架SDWebImage解讀

2020-07-26 02:39:59
字體:
來源:轉載
供稿:網友

目的

在使用SDWebImage加載圖片時,尤其是加載gif等大圖時,SDWebImage會將圖片緩存在內存中,這樣是非常吃內存的,這時我們就需要在適當的時候去釋放一下SDWebImage的內存緩存,才不至于造成APP閃退。

SDWebImage 提供了 UIImageView、UIButton 、MKAnnotationView 的圖片下載分類,只要一行代碼就可以實現圖片異步下載和緩存功能。

這樣開發者就無須花太多精力在圖片下載細節上,專心處理業務邏輯。

SDWebImage 特點

  1. 提供 UIImageView, UIButton, MKAnnotationView 的分類,用來顯示網絡圖片,以及緩存管理
  2. 異步下載圖片
  3. 異步緩存(內存+磁盤),并且自動管理緩存有效性
  4. 后臺圖片解壓縮
  5. 同一個 URL 不會重復下載
  6. 自動識別無效 URL,不會反復重試
  7. 不阻塞主線程
  8. 高性能
  9. 使用 GCD 和 ARC
  10. 支持多種圖片格式(包括 WebP 格式)
  11. 支持動圖(GIF)
  12. 4.0 之前的動圖效果并不是太好
  13. 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. 使用回調 blocks

在 block 中得到圖片下載進度和圖片加載完成(下載完成或者讀取緩存)的回調,如果你在圖片加載完成前取消了請求操作,就不會收到成功或失敗的回調

[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 來下載圖片,但是圖片內容不會緩存。

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 支持內存緩存和異步的磁盤緩存(可選),如果你想單獨使用 SDImageCache 來緩存數據的話,可以使用單例,也可以創建一個有獨立命名空間的 SDImageCache 實例。

添加緩存的方法:

[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];

默認情況下,圖片數據會同時緩存到內存和磁盤中,如果你想只要內存緩存的話,可以使用下面的方法:

[[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 中的一部分可能是動態變化的(比如獲取權限上的限制),所以我們只需要把 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 加載不同尺寸的網絡圖片時會出現尺寸縮放問題。

解決方案:

自定義 UITableViewCell,重寫 -layoutSubviews 方法,調整位置尺寸;

或者直接棄用 UITableViewCell 的 imageView,自己添加一個 imageView 作為子控件。

問題 2:圖片刷新問題:SDWebImage 在進行緩存時忽略了所有服務器返回的 caching control 設置,并且在緩存時沒有做時間限制,這也就意味著圖片 URL 必須是靜態的了,要求服務器上一個 URL 對應的圖片內容不允許更新。但是如果存儲圖片的服務器不由自己控制,也就是說 圖片內容更新了,URL 卻沒有更新,這種情況怎么辦?

解決方案:在調用 sd_setImageWithURL: placeholderImage: options:方法時設置 options 參數為 SDWebImageRefreshCached,這樣雖然會降低性能,但是下載圖片時會照顧到服務器返回的 caching control。

問題 3:在加載圖片時,如何添加默認的 progress indicator ?

解決方案:在調用 -sd_setImageWithURL:方法之前,先調用下面的方法:

 [imageView sd_setShowActivityIndicatorView:YES]; [imageView sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];```![](http://upload-images.jianshu.io/upload_images/2829694-48307b4d71bc5800.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频久久久久| 欧美激情国产精品| 欧美在线观看日本一区| 国产欧美一区二区三区视频| 久久久黄色av| 亚洲综合一区二区不卡| 国产精品一区二区三区久久久| 欧美日韩一区二区精品| 高清视频欧美一级| 国产成人黄色av| 热久久美女精品天天吊色| 亚洲电影第1页| 最近中文字幕日韩精品| 成人免费视频网| 亚洲aⅴ日韩av电影在线观看| 日韩免费观看视频| 久久99热精品这里久久精品| 欧美激情a在线| 亚洲欧洲在线视频| 最近更新的2019中文字幕| 欧美激情二区三区| 欧美日韩美女视频| 黄色精品在线看| 亚洲第一区第一页| 俺去亚洲欧洲欧美日韩| 欧美激情在线一区| 亚洲免费小视频| 大桥未久av一区二区三区| 91日本在线视频| 91亚洲午夜在线| 成人h视频在线观看播放| 国产香蕉精品视频一区二区三区| 国产一区二区三区在线观看网站| 久久精品亚洲热| 日韩av综合网| 91精品视频播放| 亚洲天堂男人天堂女人天堂| 国产精品海角社区在线观看| 国产精品www| 91av视频在线免费观看| www.日韩av.com| 国产伦精品免费视频| 国产精品丝袜久久久久久不卡| 亚洲黄色在线观看| 国产一区视频在线播放| 欧美三级xxx| 欧美一级成年大片在线观看| 亚洲欧美中文字幕| 亚洲bt欧美bt日本bt| 91亚洲国产精品| 在线成人一区二区| 欧美在线视频网| 久久久久久久国产精品视频| 精品久久久国产| 亚洲精品av在线播放| 国内精品久久久久久久久| 欧美成人h版在线观看| 在线成人一区二区| 午夜精品一区二区三区av| 91成人国产在线观看| 国产精品女视频| 久久精品99久久久久久久久| 日韩在线播放视频| 2019中文字幕免费视频| 97精品欧美一区二区三区| 欧美大片在线看免费观看| 中文字幕精品网| 亚洲欧美国产一区二区三区| 亚洲国产又黄又爽女人高潮的| 激情av一区二区| 日韩在线视频观看正片免费网站| 日本亚洲欧洲色| 久久久日本电影| 一二美女精品欧洲| 国产婷婷97碰碰久久人人蜜臀| 在线成人激情黄色| 国产不卡av在线免费观看| 亚洲精品久久久久| 欧洲成人在线观看| 91美女福利视频高清| 久久久久久久亚洲精品| 狠狠做深爱婷婷久久综合一区| 亚洲美女视频网站| 欧美精品国产精品日韩精品| 国产精品免费一区豆花| www.国产一区| 欧美在线观看日本一区| 亚洲性日韩精品一区二区| 欧美电影免费观看高清| 亚洲电影成人av99爱色| 欧洲午夜精品久久久| 亚洲天堂免费观看| 琪琪亚洲精品午夜在线| 亚洲石原莉奈一区二区在线观看| 成人激情免费在线| 中文字幕久久精品| 国产成人涩涩涩视频在线观看| 91精品久久久久久久久久入口| 97在线免费观看视频| 亚洲缚视频在线观看| 久久久中精品2020中文| 亚洲人精品午夜在线观看| 亚洲成人av片在线观看| 国产精品夜间视频香蕉| 国产91网红主播在线观看| 欧美日韩在线一区| 992tv在线成人免费观看| 亚洲高清不卡av| 国产亚洲aⅴaaaaaa毛片| 中文字幕欧美精品在线| 在线视频欧美性高潮| 国产精品久久999| 国产欧美婷婷中文| 国产成人+综合亚洲+天堂| 久久91亚洲精品中文字幕| 亚洲少妇激情视频| 日日噜噜噜夜夜爽亚洲精品| 大胆欧美人体视频| 亚洲的天堂在线中文字幕| 精品国产网站地址| 最好看的2019年中文视频| 一区二区三区精品99久久| 欧美在线视频一二三| 欧美视频专区一二在线观看| 日韩女优在线播放| 欧美最猛黑人xxxx黑人猛叫黄| 91精品久久久久久久久久另类| 国产精品日韩久久久久| 国内成人精品视频| 欧美日韩日本国产| 国产福利精品视频| 久久久精品电影| 韩国欧美亚洲国产| 中日韩美女免费视频网站在线观看| 北条麻妃在线一区二区| 亚洲精品国产精品国自产观看浪潮| 久久精品99久久久香蕉| 成人午夜在线观看| 国产精品一区二区久久| 国产日韩欧美在线视频观看| 国产aaa精品| 欧美理论电影在线观看| 久久久久久久久91| 国产视频精品xxxx| 国产精品av在线播放| 国产欧美精品xxxx另类| 日韩在线观看网站| www.日本久久久久com.| 久久久久久久久久久成人| 欧美在线一级va免费观看| 欧美激情综合色综合啪啪五月| 4438全国成人免费| 欧美性资源免费| y97精品国产97久久久久久| 欧美性生交xxxxxdddd| 最近2019中文免费高清视频观看www99| 亚洲人成网站999久久久综合| 国产欧美日韩中文| 亚洲福利视频二区| 亚洲另类欧美自拍| 成人在线一区二区| 视频在线观看一区二区| 成人在线观看视频网站| 亚洲最新av在线网站|