要するに、以前にキャッシュされた画像を AFNetworking の UIImageView カテゴリのプレースホルダーとして使用する方法を探しています。
- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest
placeholderImage:(UIImage *)placeholderImage
success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success
failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure
ユースケースの例:
Post
API 応答からデータを入力するという名前のモデルがあります。
@interface Post : NSObject
@property ... NSString *smallImagePath;
@property ... NSString *largeImagePath;
@property ... NSString *description;
@end
最初の ViewController は、すべてのオブジェクトのサムネイルのグリッド (smallImagePath プロパティを介して取得) を表示しPost
ます。サムネイルをタップすると DetailViewController に移動し、最終的に大きな画像が説明とともに表示されます。
既に小さいサムネイルをダウンロードしてキャッシュしているので、大きい画像がダウンロードされるのを待つ間、プレースホルダーとして使用したいと思います。この時点では、AFImageCache は公開されていないため、アクセスする方法がわかりません。
私が考えたことの 1 つは、引数として渡される UIImage を成功ブロックに格納することです。
// add property to Post model
@property ... UIImage *smallImage;
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
[self.post setSmallImage:image];
}
そして、大きな画像をダウンロードする際に、その画像をプレースホルダーとして直接使用できます。
ただし、多数のUIImageへの参照を保持することで、これがメモリフットプリントに顕著な/悪影響を与えるかどうかはわかりません。もっと良い方法を考えられますか?