【问题标题】:How To Clear Image cache or any cache in AFNetworking?如何清除 AFNetworking 中的图像缓存或任何缓存?
【发布时间】:2017-03-22 20:51:33
【问题描述】:

大家好,谁能帮我看看如何清除AFNetworking中的缓存。

我以前有旧版本的 AFNetworking,我看到它已经更新,任何人都可以帮助我如何清理 AFnetworking 的缓存。

以前是这样的

SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
[imageCache clearDisk];
[imageCache cleanDisk];

【问题讨论】:

  • SDImageCache 来自 SDWebImage 项目,而不是 AFNetworking。

标签: ios objective-c afnetworking


【解决方案1】:

如果您使用的是 AFNetworking,我最近实施了一个小解决方法来从缓存中删除图像。

查看文件“UIImageView+AFNetworking.h”

@interface UIImageView (AFNetworking) 下,添加以下内容:

- (void)clearImageCacheForURL:(NSURL *)url;

@protocol AFImageCache 下,添加:

- (void)clearCachedRequest:(NSURLRequest *)request;

接下来,打开“UIImageView+AFNetworking.m”

@implementation UIImageView (AFNetworking) 下,添加以下内容:

- (void)clearImageCacheForURL:(NSURL *)url {
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];

    UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:request];
    if (cachedImage) {
        [[[self class] sharedImageCache] clearCachedRequest:request];
    }
}

快完成了!现在只需在@implementation AFImageCache下方添加以下内容:

- (void)clearCachedRequest:(NSURLRequest *)request {
    if (request) {
        [self removeObjectForKey:AFImageCacheKeyFromURLRequest(request)];
    }
}

你可以走了!现在,当您需要从缓存中清除特定图像 url 时,只需调用 [imageView clearImageCacheForURL:imgURL];

【讨论】:

  • 你好,我发现这个解决方法不适用于 UIButton+AFNetworking,有没有办法删除 UIButton 的图像缓存?
  • @bachnok 你能告诉我最后一行的 imgURL 是什么吗?
  • @Abha 如果您尝试清除来自http://example.com/image.jpg 之类的图像的缓存,那么您可以调用:[imageView clearImageCacheForURL:[NSURL urlWithString:@"http://example.com/image.jpg"]]
【解决方案2】:

https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ

AFNetworking 有内置的缓存机制吗?

AFNetworking 已经利用了缓存功能 由 NSURLCache 及其任何子类提供。

我们建议您试用 Pete Steinberger 的 SDURLCache 分支,它 提供磁盘缓存,这不是由 iOS 上的 NSURLCache。您可能会发现设置它很有用 对于 SDURLCache 实例,ignoreMemoryOnlyStoragePolicy 为 YES, 这将确保图像将更一致地缓存到磁盘 供离线使用(如 SDURLCache README 中所述,iOS 5 支持,但仅适用于 http,因此如果您使用它仍然是一个不错的选择 想要支持 iOS 4 或 https)

我也会看到这个问题: How To Disable AFNetworking Cache

还有这个: AFNetworking and caching

激活 NSURLCache 的那一刻,你可以指定它的最大值 尺寸。您还可以通过调用 removeAllCachedResponses 或 removeCachedResponsesForRequest 方法。

希望对你有帮助。

【讨论】:

    【解决方案3】:

    如果您使用 AFNetworking 使用 cocoaPods,那么您可以通过创建一个 UIImageView (clearCache) 类别来做到这一点

            - (void)clearImageCacheForURL:(NSURL *)url {
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
    
    UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:request];
    if (cachedImage) {
        [self clearCached:[[self class] sharedImageCache] Request:request];
    }
    }
    
    - (void)clearCached:(NSCache *)imageCache Request:(NSURLRequest *)request {
    if (request) {
        [imageCache removeObjectForKey:[[request URL] absoluteString]];
    }
    }
    

    【讨论】:

      【解决方案4】:

      如果您通过 cocoapods 使用 AFNetworking3.0,则通过为 UIImageView 创建类别来使用以下代码。

      #import <AFNetworking/UIImageView+AFNetworking.h>
      #import <AFNetworking/AFImageDownloader.h>
      #import <AFNetworking/AFAutoPurgingImageCache.h>
      
      + (void)clearImageCacheForURL:(NSURL *)url {
          NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
          [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
          id <AFImageRequestCache> imageCache = [[self class] sharedImageDownloader].imageCache;
          UIImage *cachedImage = [imageCache imageforRequest:request withAdditionalIdentifier:nil];
          if (cachedImage) {
              [self clearCached:imageCache Request:request];
          }
      }
      
      + (void)clearCached:(AFAutoPurgingImageCache *)imageCache Request:(NSURLRequest *)request {
          if (request) {
              [imageCache removeImageforRequest:request withAdditionalIdentifier:nil];
          }
      }
      

      【讨论】:

        【解决方案5】:
        AFImageDownloader *imageDownloader = [AFImageDownloader   defaultInstance];
        
        NSURLCache *urlCache = imageDownloader.sessionManager.session.configuration.URLCache;
        
        [urlCache removeAllCachedResponses];
        
        [imageDownloader.imageCache removeImageWithIdentifier:url];
        

        这将有助于删除现金图像。 url是需要移除的图片url

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-22
          • 2011-04-12
          • 2011-02-25
          • 2020-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-27
          相关资源
          最近更新 更多