AFNetworking +缓存图像占位符

时间:2012-05-30 01:56:52

标签: iphone objective-c ios5 afnetworking nscache

简而言之,我正在寻找一种方法在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将显示所有Post个对象的缩略图网格(通过smallImagePath属性检索)。点击缩略图将带您进入DetailViewController,其中大图像将最终显示描述。

由于我已经下载并缓存了小缩略图,因此我希望在等待下载大图像时将其用作占位符。此时我无法弄清楚如何进入AFImageCache,因为它无法公开访问。

我想到的一件事是存储在成功块中作为参数传递的UIImage:

// add property to Post model
@property ... UIImage *smallImage;

success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
    [self.post setSmallImage:image];
}

然后我可以在下载大图像时直接将该图像用作占位符。

我不确定这是否会通过保留对一堆UIImage的引用来对我的内存占用产生任何明显/负面的影响。你能想到一个更好的方法吗?

1 个答案:

答案 0 :(得分:0)

结束了我最初的想法,即将图像存储为我的模型上的属性。这样,当需要在较大的图像加载时声明占位符时,我只是访问该属性。表现一直很好。