Как очистить кэш изображения или любой кеш в AFNetworking?

Привет всем Может кто-нибудь помочь мне, как очистить кеш в AFNetworking.

У меня была старая версия AFNetworking, и я вижу, что она обновлена. Может ли любой орган помочь мне очистить кеш для AFnetworking.

Раньше это было что-то вроде этого

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

Ответ 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];

Ответ 2

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

Есть ли в AFNetworking какие-либо механизмы кэширования?

AFNetworking использует уже имеющиеся функции кэширования предоставляемый NSURLCache и любым из его подклассов.

Мы рекомендуем вам попробовать вилку Pete Steinberger для SDURLCache, которая обеспечивает кэширование диска, которое иначе не выполняется NSURLCache на iOS. Возможно, вам будет полезно установить ignoreMemoryOnlyStoragePolicy - YES для экземпляра SDURLCache, который гарантирует, что изображения будут кэшироваться на диск более последовательно для использования в автономном режиме (который, как сообщается в SDURLCache README, iOS 5 поддерживает, но только для http, поэтому он по-прежнему остается хорошим вариантом, если вы хотите поддерживать iOS 4 или https)

Я бы тоже увидел этот вопрос: Как отключить кеш AFNetworking

Также это: AFNetworking и кеширование

В момент активации 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

Если вы используете AFNetworking3.0 через cocoapods, используйте ниже код, создав категорию для 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-адрес изображения, который нужно удалить