【问题标题】:AFNetworking 3.0 on disk image cachingAFNetworking 3.0 关于磁盘图像缓存
【发布时间】:2016-07-16 04:43:43
【问题描述】:

AFNetworking 是否可以在磁盘上缓存图像超过会话?例如一周或一个月。在我的项目中,我使用了 SDWebImageAFNetworking,但前几天我发现 AFNetworkingSDWebImage 具有相同的功能>,所以移除了一个SDWebImage,并编写了这样的代码来将图像存储在磁盘上:

对于图像视图

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];

但我仍然无法将图像缓存超过会话。 (对不起我的英语)

【问题讨论】:

    标签: ios afnetworking image-caching afnetworking-3


    【解决方案1】:

    图像使用 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];
    

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 2017-06-15
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2016-08-30
      • 2017-07-02
      • 2013-02-10
      • 1970-01-01
      相关资源
      最近更新 更多