AFNetworking 3.0 磁盘镜像缓存

6
在AFNetworking中,是否可以将图片缓存在磁盘上,使其在多个会话中保留一周或一个月?我在项目中使用了SDWebImage和AFNetworking,但是几天前我发现AFNetworking具有与SDWebImage相同的功能,因此我删除了SDWebImage并编写了以下代码来存储图像:
对于ImageView:
NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                              cachePolicy:NSURLRequestReturnCacheDataElseLoad 
                                          timeoutInterval:60];
[imageView setImageWithURLRequest:imageRequest placeholderImage:placeholderImage success:nil failure:nil];

下载图像以便将来使用

NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                              cachePolicy:NSURLRequestReturnCacheDataElseLoad 
                                          timeoutInterval:60];
[[AFImageDownloader defaultInstance] downloadImageForURLRequest:imageRequest success:nil failure:nil];

获取下载的图像。
NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                              cachePolicy:NSURLRequestReturnCacheDataElseLoad 
                                          timeoutInterval:60];
UIImage *image = [[AFImageDownloader defaultInstance].imageCache imageforRequest:imageRequest withAdditionalIdentifier:nil];

但是这仅仅在会话期间有效,当我加载完所有图片后,关闭互联网并重新启动我的应用程序,结果是:缓存中没有图像。

我还尝试在AppDelegate中添加以下代码:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:2 * 1024 * 1024
                                                        diskCapacity:100 * 1024 * 1024 
                                                            diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

但是我仍然无法将图像缓存更长时间,只能在会话期间缓存。(对我的英语表示抱歉)

1个回答

7

使用内置于iOS的标准NSURLCache对图像进行磁盘缓存,这意味着如果您的响应包括正确的缓存头信息,则这些项应该以缓存形式保存在磁盘上。因此,例如头信息应如下所示:

"Accept-Ranges" = bytes;
"Cache-Control" = "max-age=604800";
Connection = close;
"Content-Length" = 3808;
"Content-Type" = "image/png";
Date = "Tue, 29 Mar 2016 19:55:52 GMT";
Etag = "\"5630989d-ee0\"";
Expires = "Tue, 05 Apr 2016 19:55:52 GMT";
"Last-Modified" = "Wed, 28 Oct 2015 09:42:53 GMT";
Server = nginx;

如果您已经下载了一张图片并希望从磁盘缓存中获取它,请执行以下操作:

NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                                      cachePolicy:NSURLRequestReturnCacheDataElseLoad
                                                  timeoutInterval:60];
UIImage *image = [UIImage imageWithData:[[AFImageDownloader defaultURLCache] cachedResponseForRequest:imageRequest].data];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接