我正在尝试下载一些文件。
对于每个单元格,我检查文件是否存在并且已经存储在目录中,如果不是,我会下载它。
但我也下载了几个单元格的文件。
如果我正在尝试提前为不可见的单元格下载文件,但是用户滚动到单元格并且文件尚未完全下载,会发生什么。
无论如何都要阻止它下载两次? 无论如何都知道该文件已经下载了吗?
我正在使用AFNetworking。
答案 0 :(得分:4)
您尝试做的事情有一个名称,而且缓存。
AFNetworking
已根据official FAQs
AFNetworking是否内置了任何缓存机制?
AFNetworking
利用NSURLCache
及其任何子类已经提供的缓存功能。只要您的NSURLRequest
对象具有正确的缓存策略,并且您的服务器响应包含有效的Cache-Control标头,响应将自动缓存以用于后续请求。
按如下方式设置缓存,您就可以了
- (void)setupCache {
NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:1024*1024*4 // 1MB mem cache
diskCapacity:1024*1024*5 // 5MB disk cache
diskPath:nil];
[NSURLCache setSharedURLCache:urlCache];
}
然后只是正常执行请求,如果资源在缓存中,您将获得缓存命中,并且您不会下载两次。
请注意,如果您必须支持iOS5
以下的任何内容,则必须使用SDURLCache
之类的替代网址缓存,并将其设置如下
- (void)setupCache {
SDURLCache *urlCache = [[SDURLCache alloc] initWithMemoryCapacity:1024*1024 // 1MB mem cache
diskCapacity:1024*1024*5 // 5MB disk cache
diskPath:[SDURLCache defaultCachePath]];
[NSURLCache setSharedURLCache:urlCache];
}
原因在this article中得到了很好的解释,但可以通过以下引用进行总结:
在iOS5之前,
NSURLCache
只是将请求保存到内存中,即使文档另有说明 - diskCapacity属性也被默默忽略