亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

iOS 圖片加載框架SDWebImage解讀

 更新時間:2017年10月10日 16:30:43   作者:L展菲Q  
本篇文章主要介紹了iOS 圖片加載框架SDWebImage解讀,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

目的

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

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

這樣開發(fā)者就無須花太多精力在圖片下載細節(jié)上,專心處理業(yè)務邏輯。

SDWebImage 特點

  1. 提供 UIImageView, UIButton, MKAnnotationView 的分類,用來顯示網(wǎng)絡圖片,以及緩存管理
  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 來緩存數(shù)據(jù)的話,可以使用單例,也可以創(chuàng)建一個有獨立命名空間的 SDImageCache 實例。

添加緩存的方法:

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

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

[[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 方法,調整位置尺寸;

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

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

解決方案:在調用 sd_setImageWithURL: placeholderImage: options:方法時設置 options 參數(shù)為 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)

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

相關文章

  • iOS自定義collectionView實現(xiàn)毛玻璃效果

    iOS自定義collectionView實現(xiàn)毛玻璃效果

    不知道大家發(fā)現(xiàn)沒有蘋果在iOS7.0之后,很多系統(tǒng)界面都使用了毛玻璃效果,增加了界面的美觀性,所以這篇文章跟大家分享個iOS自定義collectionView實現(xiàn)毛玻璃效果的方法,有需要的可以參考借鑒,下面來一起看看。
    2016-09-09
  • iOS手勢識別的詳細使用方法(拖動,縮放,旋轉,點擊,手勢依賴,自定義手勢)

    iOS手勢識別的詳細使用方法(拖動,縮放,旋轉,點擊,手勢依賴,自定義手勢)

    這篇文章主要介紹了iOS手勢識別的詳細使用方法(拖動,縮放,旋轉,點擊,手勢依賴,自定義手勢),具有一定的參考價值,有需要的可以參考一下。
    2016-11-11
  • iOS APP實現(xiàn)微信H5支付示例總結

    iOS APP實現(xiàn)微信H5支付示例總結

    這篇文章主要介紹了iOS APP實現(xiàn)微信H5支付示例總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • iOS中block的定義與使用

    iOS中block的定義與使用

    蘋果官方文檔聲明,block是objc對象。下面這篇文章主要給大家介紹了關于iOS中block的定義與使用,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • iOS開發(fā)輸入自動填充UITextField背景色

    iOS開發(fā)輸入自動填充UITextField背景色

    如何在iOS中實現(xiàn)輸入時自動填充背景色的效果,首先,我們設置UITextField的背景色為初始顏色,然后,通過設置UITextField的代理,并監(jiān)聽UITextField的輸入事件,我們在用戶開始輸入時將其背景色改變?yōu)楦吡令伾?在用戶結束輸入時恢復為初始顏色
    2023-10-10
  • iOS Webview自適應實際內容高度的4種方法詳解

    iOS Webview自適應實際內容高度的4種方法詳解

    這篇文章主要介紹了iOS Webview自適應實際內容高度的4種方法詳解,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • 詳解ios監(jiān)聽reloadData刷新列表完畢的時機

    詳解ios監(jiān)聽reloadData刷新列表完畢的時機

    這篇文章主要介紹了詳解ios監(jiān)聽reloadData刷新列表完畢的時機,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • iOS基礎知識之@property 和 Ivar 的區(qū)別

    iOS基礎知識之@property 和 Ivar 的區(qū)別

    這篇文章主要介紹了iOS基礎知識之@property 和 Ivar 的區(qū)別介紹,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • IOS開發(fā)仿微信右側彈出視圖實現(xiàn)

    IOS開發(fā)仿微信右側彈出視圖實現(xiàn)

    這篇文章主要介紹了IOS開發(fā)仿微信右側彈出視圖實現(xiàn)的相關資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣類似的功能,需要的朋友可以參考下
    2017-10-10
  • iOS中獲取系統(tǒng)相冊中的圖片實例

    iOS中獲取系統(tǒng)相冊中的圖片實例

    這篇文章主要介紹了iOS中獲取系統(tǒng)相冊中的圖片實例,具有一定的參考價值沒有需要的朋友可以了解一下。
    2016-11-11

最新評論