清除缓存 AFNetworking 后图像未从磁盘中删除

Images are not removed from disk after clearing cache AFNetworking

我试过清除缓存位,应用的大小并没有明显变小。

我的应用程序大小约为 30MB,另外还有 45MB 用于缓存图像。

这是我尝试清除缓存的方式:

 [[NSURLCache sharedURLCache] removeAllCachedResponses];
 [[AFImageDownloader defaultURLCache] removeAllCachedResponses];
 AFAutoPurgingImageCache *imageCache = [AFImageDownloader defaultInstance].imageCache;
 [imageCache removeAllImages];            

这是我使用 AFNetworking (3.1.0) 下载图像的方式:

#import "AFImageDownloader.h"

[photoImageView setImageWithURLRequest:[NSURLRequest requestWithURL:thumb] placeholderImage:myCachedImage success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
                [self setPhotoImage:image];
            } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
                [self setupPlaceholder];
            }];

见下文:

  1. AFAutoPurgingImageCache *imageCache = [AFImageDownloader defaultInstance].imageCache;imageCache存到内存里,做[imageCache removeAllImages];
  2. 没用
  3. 您只需要做 [[AFImageDownloader defaultURLCache] removeAllCachedResponses];。它是 apple 唯一提供的清除 URLCache.
  4. 的 API
  5. 你发现当你调用 removeAllCachedResponsesfsCachedData 没有被删除。因为苹果有自己的磁盘数据清除机制。可能是我搜索的每7天清一次盘数据,但我不确定。
  6. 我认为看看其他人如何使用 fsCachedData 很有趣。 Should I clear the fsCachedData folder myself?
  7. 希望对你有所帮助

我们也在我们的一个应用程序中看到了这一点。根据此 http://blog.airsource.co.uk/2014/10/11/nsurlcache-ios8-broken/,这是一个 iOS 8 错误,Apple 将在今天的 iOS 8.1 更新中更正它。

所以回答你的问题:不,你不应该自己删除缓存,幸运的是 Apple 的修复确实会清理旧数据。如果由于某种原因没有,您应该可以自己删除它,没有任何问题。

我已经证实 iOS 8.1 确实解决了这个问题。但是,用户必须在更新后启动应用一次才能清除缓存。

此代码适用于 AFNetworking 3.1:

        [[NSURLCache sharedURLCache] removeAllCachedResponses];

        AFImageDownloader *imageDownloader = [AFImageDownloader defaultInstance];
        NSURLCache *urlCache = imageDownloader.sessionManager.session.configuration.URLCache;
        [urlCache removeAllCachedResponses];

        [imageDownloader.imageCache removeAllImages];