Можно ли отключить все функции кеша из AFNetworking?Как отключить кеш AFNetworking
Я создаю свою собственную систему кэширования и не хочу, чтобы это занимало дисковое пространство.
Спасибо, Эшли
Можно ли отключить все функции кеша из AFNetworking?Как отключить кеш AFNetworking
Я создаю свою собственную систему кэширования и не хочу, чтобы это занимало дисковое пространство.
Спасибо, Эшли
кэширование обрабатывается приложением шириной NSURLCache
. Если вы не устанавливаете общий кэш, запросы не кэшируются. Даже с общим NSURLCache
реализация по умолчанию в iOS в любом случае не поддерживает кэширование дисков.
Сказанное, если у вас нет особой причины писать собственную систему кэширования, я бы настоятельно рекомендовал. NSURLCache
достаточно хорош для 99,9% приложений: он управляет директивами кэша от входящих ответов и соответствующим образом использует их с новыми запросами и делает это автоматически таким образом, что вряд ли будет узким местом производительности вашего приложения. Как кто-то, потративший неисчислимые часы на то, чтобы сделать это сам (, а затем отбросил его, так как это было совершенно необязательно), я бы сказал, что есть намного лучшие места, чтобы сфокусировать ваше внимание на развитии.
Я нашел на iOS 6, что запросы иногда кэшируются, даже если запрос имеет NSURLRequestReloadIgnoringCacheData
. Добавление блока ответа кэш-памяти, который возвращает nil
, предотвращает кеширование запроса.
I второй это. Спасибо за решение! – Firefly
Для использования 'AFHTTPClient' мы должны переопределить' requestWithMethod: путь: parameters' .Call super метод для получения 'NSURLRequest' и сказать' request.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData; ' – Yeung
Не могли бы вы исправить неправильный тип перечисления в своем фрагмент кода? Это будет мисс, ведущий для тех, кто не замечает, что есть два обновления. –
Первоначально я нашел ответ Джейсона Мура на работу, однако недавно я заметил, что мое приложение все еще кэширует запросы. Я не использую последнее AFNetworking, поэтому я не знаю, было ли кэширование рассмотрено в более поздних сборках.
Проект Urlcache Apple, это сказать:
По умолчанию система URL загрузки Cocoa использует небольшой общей памяти кэш. Нам не нужен этот кеш, поэтому мы устанавливаем его на ноль при запуске приложения .
И затем делает это, чтобы отключить кеш.
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
diskCapacity:0
diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
Это будет отключить все кэширования для всего вашего приложения, которое не может быть идеальным в некоторых ситуациях, но NSURLRequest
не соблюдает запрашиваемую политику кэширования, это единственный вариант слева, что я могу видеть.
работал для меня даже с AFnetworking - кэши искажали возобновленную загрузку с https-сервиса ... – PetrV
NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
К сожалению, эти методы не работали для меня. Единственный способ, мне удалось получить кэш отключен этот путь:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
У меня есть singleton для управления вызовами Backend. Я помещаю эти две строки кода в мой метод init, и все работает хорошо! – Zeb
Это может зависеть от реализации сервера, но добавление Cache-Control:no-store
заголовка вашего исходящего запроса должен привести ответ, что содержит тот же заголовок, поэтому команда NSURLCache
не кэширует ответ на диск.
IMHO это лучший подход, чем полностью отключить кэширование дисков, особенно если вы пишете SDK-код, который будет использоваться другими приложениями, которые могут использовать NSURLCache
.
есть ли способ отключить его? Мне это действительно нужно, так как в любом случае моя система кеша немного неортодоксальна. Это необходимо, чтобы отключить кеш. –
По умолчанию отключено. Вы должны сделать выбор, создав «NSURLCache» и установив это как общий кэш. – mattt
Это уже? В настоящее время похоже, что он будет автоматически создан для вас. https://github.com/AFNetworking/AFNetworking/blob/experimental-1.0RC1/AFNetworking/UIImageView%2BAFNetworking.m#L70 – steipete