当我的应用程序加载时,我拉下99个对象的JSON表示。
每个对象都有一个“图片网址”字段,我传递给AFNetworking的setImageWithURLRequest
。
我的图片加载中的tableView,因此,只有前几个小区为他们图像的请求。 这不是直到我向下滚动后续图像要求的提出。
有一次,我拉下初始数据集,我希望能够揭开序幕一个后台进程熄灭,并下载最初未可见的95个左右的物体,并以这样的方式,当缓存它们setImageWithURLRequest
被称为,它会已经有缓存的图像从拉。
AFImageCache是私人的,所以我不知道这是可能的。 我知道我可以用NSURLCache缓存,但后来我有两个单独的,孤立的缓存,并且任的效果并不理想。
我不使用AFNetworking的UIImageView的类唯一的选择?
这些答案让我这么认为:
iOS的缓存图片与AFImageCache似乎不工作
如何使用AFNetworking的setImageWithURL当配置缓存
拜托, 请不要这么做。
相信我,当我说,这几乎可以肯定是不必要的。
事实上,它很可能有预期的效果相反,由于下载,将可能永远不会观看的图像的压力增加。
缓存是私人的一个很好的理由 - 它只是有关于加快滚动意见后续请求。 只要有表视图下载图像的要求,你应该就好了。 如果有的话,您可以优化您下载图像的大小(确保正确的图像尺寸,压缩智能)。
我不会创建一批的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) {}];
}
这里有一个解决方案-创建一些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]];
}
你可能要考虑满载
一个简单的自我维护缓存图像下载并保存到一个URL有关的文件名。
每当你想从URL加载图像,尝试从硬盘读取第一 - 如果返回零,继续与您的图像下载。
请记住,虽然清除图像缓存。