Objective-C
iOS
SDWebImage

SDWebImageでキャッシュしているつもりが、キャッシュ出来ていなかったので正しい使い方をメモしておく

More than 3 years have passed since last update.

今回の記事では、SDWebImage 3.7.1 を想定しています。

ライブラリ SDWebImage
ドキュメント SDWebImage 3.7.1

キャッシュされていなかった原因ですが、単純に使うクラスを間違えていました。

  • SDWebImageDownloader
  • SDWebImageManager

SDWebImageDownloaderクラスを使用して実装していたのですが、
そもそもこのクラスはダウンロードだけを担当していて、キャッシュ等の処理は行いません。

[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:@"URL文字列"]
                                                      options:0
                                                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                                                     }
                                                    completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                                                    }];                                                  

キャッシュを行いたい場合は、SDWebImageManagerクラスを使用して実装します。

[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"URL文字列"]
                                                options:0
                                               progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                                               }
                                              completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                                              }];

SDWebImageManagerクラスの中で、SDWebImageDownloader クラスのインスタンスを持っているので、
ダウンロード処理自体はSDWebImageDownloaderで行っているようです。