Как очистить кэш изображения или любой кеш в 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-адрес изображения, который нужно удалить