読者です 読者をやめる 読者になる 読者になる

24/7 twenty-four seven

iOS/OS X application programing topics.

画像キャッシュとダウンローダで参考になる(と思う)オープンソースの実装

iPhone Objective-C Cocoa Mac


ダウンロードした画像をキャッシュするクラスの設計と実装について - 24/7 twenty-four seven

実は上の記事で紹介したクラスを書いた当時、それが必要だったアプリをリリースしたすぐ後くらいにほとんど同じ実装のライブラリを見つけまして。
自分の実装はそんなに間違ってなかったんだなーと安心しつつも、はじめからこれを使っとけばよかったとも思ったので紹介します。

rs/SDWebImage · GitHub


NSCacheは使ってないですが、その他は私が書いたものとよく似ていて、たぶんオーソドックスな実装なんじゃないかなと思います。


SDImageCache と SDWebImageDownloader がライブラリのコアとなるクラスで、これらとうまく連携するように UIImageView や UIButton の拡張や、サポートクラスがあるという構成になっています。

パッと見た感じ、けっこう構成ファイルが多いように見えますが、それぞれのクラスはかなり疎結合になっているのでキャッシュだけ、ダウンローダだけを利用することも簡単です。


前回の記事の、画像が無い場合にデフォルト画像を返す引数はキャッシュのクラスには無いですが、UIImageView のカテゴリで、 - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; というメソッドがあるので、やっぱり無かったらプレースホルダとしてデフォルト画像を返せるようにする、というのはよくある要件なのだなあと思いました。


この SDWebImageCarousel という Instagram を Macで閲覧できるアプリケーションでも使われています。