AFNetworking的UIImageView类别的预缓存映像

dji*_*i33 8 caching objective-c nsurlcache ios afnetworking

当我的应用加载时,我下拉了99个对象的JSON表示.

每个对象都有一个'image_url'字段,我将其传递给AFNetworking setImageWithURLRequest.

我的图像加载到tableView中,因此,只有前几个单元格对其图像进行请求.直到我向下滚动,才会发出后续图像请求.

在我下拉初始数据集后,我希望能够启动后台进程并下载最初不可见的95个左右的对象,并以这样的方式缓存它们setImageWithURLRequest:它已经有一个缓存的图像.

虽然AFImageCache是​​私有的,所以我不确定这是否可行.我知道我可以使用NSURLCache缓存,但后来我有两个独立的,孤立的缓存,这也不理想.

我是唯一不使用AFNetworking的UIImageView类别的选择吗?

这些答案让我这么想:

iOS使用AFImageCache缓存图像似乎不起作用
如何在使用AFNetworking的setImageWithURL时配置缓存

mat*_*ttt 24

拜托,不要这样做.

相信我,当我说这几乎肯定是不必要的.

实际上,由于下载可能永远不会被查看的图像的压力增加,它可能会产生与预期效果相反的效果.

缓存是私有的,原因很简单 - 只是为了加快滚动视图上的后续请求.只需让表视图按要求下载图像,你就可以了.如果有的话,您可以优化正在下载的图像的大小(确保正确的图像尺寸;智能压缩).

  • 我如何仅预加载下3或4张图像? (4认同)

Mic*_*ick 5

我不会创建一堆UIImageView来实现你的目的,这将是一个非常低效的方法.

您可以添加自己的方法UIImageView+AFNetworking.h来实现此功能.我瘦了这将是最好的方法.一个未经测试的例子是:

+ (void) cacheImageWithURL:(NSURL *)url 
{
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
    [request setHTTPShouldHandleCookies:NO];
    [request setHTTPShouldUsePipelining:YES];

    AFImageRequestOperation *requestOperation = [[[AFImageRequestOperation alloc] initWithRequest:request] autorelease];
    [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        [[[self class] af_sharedImageCache] cacheImage:responseObject forRequest:request];
    } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {}];
}
Run Code Online (Sandbox Code Playgroud)