最近お世話になることが多いので、この際情報をまとめておきたい。
概要
GitHub: https://github.com/jakemarsh/JMImageCache
- GCD で画像を非同期取得
- NSCache ベースのキャッシュ機構(サブクラス)
- キャッシュ時のキーは URL
- シングルトン
- Blocks
- デリゲート通知
- MIT LICENSE
追記:12.10.03
Blocksでコールバック返ってくるようになってた。
- (void)imageForURL:(NSURL *)url key:(NSString *)key completionBlock:(void (^)(UIImage *image))completion;
- (void)imageForURL:(NSURL *)url completionBlock:(void (^)(UIImage *image))completion;
画像を取得
UIImage *image = [[JMImageCache sharedCache] imageForURL:@"http://URL.jpg" delegate:OBJ];
非同期で実行され、ダウンロードとキャッシュが完了したらデリゲートに通知が来る。既にキャッシュがあれば UIImage が即返る。
シングルトンなのでデリゲートが途中で変わったりする可能性もあるが、その場合はたぶん通知せずに終わる。
通信は単純に [NSData dataWithContentsOfURL:URL];
で行っている。同期処理だが、GCD なので非同期。
もし NSURLRequest を使いたいなら、この部分を NSURLConnection の同期処理に書き換えてしまえば良い。その場合返り値は NSData なので1行書き換えるだけで済む。
キャッシュ削除
すべて削除
[[JMImageCache sharedCache] removeAllObjects];
特定のキャッシュを削除
[[JMImageCache sharedCache] removeImageForURL:@"http://URL.jpg"];
キャッシュファイルが /Library/Caches/JMCache/
にあるので、これも削除するように実装を変えた方がいいかもしれない。