如何清除AFNetworking中的图像缓存或任何缓存?

时间:2013-07-14 21:55:47

标签: ios objective-c afnetworking

大家好,任何人都可以帮我解决如何清除AFNetworking中的缓存。

我以前有旧版本的AFNetworking,我发现它已经更新了,任何机构都可以帮我解决如何清理AFnetworking的缓存。

以前就是这样的

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

5 个答案:

答案 0 :(得分:16)

如果你正在使用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];

即可

答案 1 :(得分:6)

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方法。

希望它有所帮助。

答案 2 :(得分:4)

如果您使用cocoaPods使用AFNetworking,那么您可以通过制作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]];
}
}

答案 3 :(得分:3)

如果您通过cocoapod使用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];
    }
}

答案 4 :(得分:1)

AFImageDownloader *imageDownloader = [AFImageDownloader   defaultInstance];

NSURLCache *urlCache = imageDownloader.sessionManager.session.configuration.URLCache;

[urlCache removeAllCachedResponses];

[imageDownloader.imageCache removeImageWithIdentifier:url];

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