我正在尝试下载一些文件。
对于每个单元格,我检查文件是否存在并且是否已经存储在目录中,如果不存在,我会下载它。
但我也为接下来的几个单元下载文件。
如果我尝试提前下载不可见单元格的文件,但随后用户滚动到该单元格并且文件尚未完全下载,会发生什么情况。
有没有办法阻止它下载两次? 无论如何知道该文件已经被下载了吗?
我正在使用 AFNetworking。
我正在尝试下载一些文件。
对于每个单元格,我检查文件是否存在并且是否已经存储在目录中,如果不存在,我会下载它。
但我也为接下来的几个单元下载文件。
如果我尝试提前下载不可见单元格的文件,但随后用户滚动到该单元格并且文件尚未完全下载,会发生什么情况。
有没有办法阻止它下载两次? 无论如何知道该文件已经被下载了吗?
我正在使用 AFNetworking。
你想要做的事情有一个名字,它是缓存。
AFNetworking
已经按照官方常见问题解答
AFNetworking 有内置的缓存机制吗?
AFNetworking
利用已经由其NSURLCache
及其任何子类提供的缓存功能。只要您的NSURLRequest
对象具有正确的缓存策略,并且您的服务器响应包含有效的 Cache-Control 标头,响应将自动缓存以供后续请求使用。
如下设置缓存就OK了
- (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
,则必须使用替代 URL 缓存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];
}
原因在这篇文章中有很好的解释,但可以通过以下引用来概括:
在 iOS5 之前
NSURLCache
,即使文档另有说明,也只是将请求保存到内存中 - diskCapacity 属性被静默忽略