Matsushita's Blog

SDWebImageのドキュメントを読む

What is SDWebImage

非同期での画像のダウンロードや画像のキャッシュをサポートするライブラリ。 UIによってカテゴライズされている(UIImageView, UIButton, MKAnnotationView)

github.com

Read.meを読む

特徴

  • UIによってウェブ画像の追加やキャッシュの機能がサポート
  • 画像のダウンロード非同期で行う
  • モリーやディスクに画像を非同期で自動キャッシングする
  • バックグランドで画像の解凍を行う
  • 同じURLの画像は何回もダンロードしない事が保証されている
  • 存在しないURLを何度もダンロードしない事が保証されている
  • パフォーマンスGood
  • GCDとARCを用いて実装されている

Supported Image Formats

WebPとは

Googleが提供している画像ファイルの形式で、Googleが開発した圧縮形式で重浦井の形式よりもファイルサイズを小さくすることを目的としている。

How to Use

Common Problems

Handle image refresh

SDWebImageはデフォルトの状態でキャッシュが積極的に使われる。よって通常のリクエストでは既にキャッシュされてあったURLはどんなリクエストでもそのキャッシュされたURLを取得する。しかし、リモートの画像のURLが変わった場合はそのキャッシュされたURLを更新する必要がある。そういう時はSDWebImageRefreshCachedというオプションを使用しよう。こうすることでレスポンスで得られた新しいURLを優先してキャッシュ上のURLを上書きしてくれる。

Documentation @ CocoaDocs

cocoadocs.org

Using Blocks

ブロックを用いてる事で画像のダウンロードの進捗や画像のダンロードが完了したタイミングでダンロードが成功したら失敗したか通知してくれる。

※ もし途中でリクエスとキャンセルした場合、成功したか失敗したかの通知は呼ばれない。

Using SDWebImageManager

SDWebImageManger はUIImageview+WebCacheというクラスからできている。 UIViewなどに依存しない文脈の時に、直接画像のダウンロードやキャッシングを非同期で行う事ができる。

Using Asynchronous Image Downloader Independently

SDWebImageDownloaderというクラスを用いてることで非同期でも画像ダウンロードのみを独立して使用することも可能

Using Asynchronous Image Cashing Independently

画像のキャッシュを担うSDImageCasheクラスの独立して使用可能。ディスクにキャッシュを書き込む処理は非同期で行われるので、UIの操作に遅れを生じさせることはない。

SDWebCasheクラスはシングルトンなインスタンスとして設計されているが、独自で生成することもできる。必要であればインスタンスにキーとして名前を与えてあげることもできる。

Using cash key filter

同じ画像でもリクエストを送る度にURLが動的に変化する場合がある。この時一度キャッシュした画像を使用しようとしてもURLが変わっているので表示できない。そこでSDWebImageManagerが提供しているcacheKeyFilterを用いる事で、URLの変更部(クエリの部分など)を取り除いたURLを返すことができる。