LoginSignup
38
36

More than 5 years have passed since last update.

iOS: JMImageCache でラクラク画像非同期取得+キャッシュ

Last updated at Posted at 2012-10-03

最近お世話になることが多いので、この際情報をまとめておきたい。

概要

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/ にあるので、これも削除するように実装を変えた方がいいかもしれない。

38
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
36