10

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

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

以前是这样的

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

5 回答 5

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

于 2013-11-11T22:04:14.340 回答
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,它仍然是一个不错的选择)

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

还有这个: AFNetworking 和缓存

激活 NSURLCache 的那一刻,您可以指定它的最大大小。您还可以通过调用 removeAllCachedResponses 或 removeCachedResponsesForRequest 方法来清除缓存。

希望能帮助到你。

于 2013-07-14T22:56:04.000 回答
4

如果您使用 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]];
}
}
于 2014-11-18T11:57:30.903 回答
3

如果您通过 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];
    }
}
于 2016-09-20T12:23:39.663 回答
1
AFImageDownloader *imageDownloader = [AFImageDownloader   defaultInstance];

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

[urlCache removeAllCachedResponses];

[imageDownloader.imageCache removeImageWithIdentifier:url];

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

于 2017-03-22T12:51:33.113 回答