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



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

我以前有旧版本的AFNetworking,我看到它已经更新了,有人能帮我清理AFNetworking的缓存吗。

以前是这样的

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

如果您使用的是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];

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

AFNetworking是否内置任何缓存机制?

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

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

我也会看到这个问题:如何禁用AFNetworking缓存

此外:AF网络和缓存

激活NSURLCache时,您可以指定它的最大值大小您也可以通过调用removeAllCachedResponses或removeCachedResponssForRequest方法。

希望能有所帮助。

如果您使用的是使用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]];
}
}

如果您通过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];
    }
}
AFImageDownloader *imageDownloader = [AFImageDownloader   defaultInstance];
NSURLCache *urlCache = imageDownloader.sessionManager.session.configuration.URLCache;
[urlCache removeAllCachedResponses];
[imageDownloader.imageCache removeImageWithIdentifier:url];

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

最新更新