-->

对于AFNetworking的的UIImageView类预缓存图片(Pre-cache Images

2019-07-30 03:36发布

当我的应用程序加载时,我拉下99个对象的JSON表示。

每个对象都有一个“图片网址”字段,我传递给AFNetworking的setImageWithURLRequest

我的图片加载中的tableView,因此,只有前几个小区为他们图像的请求。 这不是直到我向下滚动后续图像要求的提出。

有一次,我拉下初始数据集,我希望能够揭开序幕一个后台进程熄灭,并下载最初未可见的95个左右的物体,并以这样的方式,当缓存它们setImageWithURLRequest被称为,它会已经有缓存的图像从拉。

AFImageCache是​​私人的,所以我不知道这是可能的。 我知道我可以用NSURLCache缓存,但后来我有两个单独的,孤立的缓存,并且任的效果并不理想。

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

这些答案让我这么认为:

iOS的缓存图片与AFImageCache似乎不工作
如何使用AFNetworking的setImageWithURL当配置缓存

Answer 1:

拜托, 不要这么做。

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

事实上,它很可能有预期的效果相反,由于下载,将可能永远不会观看的图像的压力增加。

缓存是私人的一个很好的理由 - 它只是有关于加快滚动意见后续请求。 只要有表视图下载图像的要求,你应该就好了。 如果有的话,您可以优化您下载图像的大小(确保正确的图像尺寸,压缩智能)。



Answer 2:

我不会创建一批的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) {}];
}


Answer 3:

这里有一个解决方案-创建一些UIImageView对象(但不要将其添加为子视图),然后使用AFNetworking的UIImageView的类别,以获取图像和填充其内部缓存。

示例代码:

NSArray *strings = [NSArray arrayWithObjects:
                    @"http://i.imgur.com/IpQzE.png",
                    @"http://i.imgur.com/sDnLs.jpg",
                    nil];

for (NSString *string in strings) {
    UIImageView *imageView = [[[UIImageView alloc] init] autorelease];
    [imageView setImageWithURL:[NSURL URLWithString:string]];
}


Answer 4:

你可能要考虑满载

一个简单的自我维护缓存图像下载并保存到一个URL有关的文件名。

每当你想从URL加载图像,尝试从硬盘读取第一 - 如果返回零,继续与您的图像下载。

请记住,虽然清除图像缓存。



文章来源: Pre-cache Images for AFNetworking's UIImageView category