Я пытаюсь понять, как использовать платформу загрузки URL-адресов для загрузки URL-адресов, использующих кеширование.Использует ли NSURLConnection NSURLCache?
Я использую NSURLConnections и кормя их NSURLRequests. Я даже установил cachePolicy для этих запросов в NSURLRequestReturnCacheDataElseLoad. В первый раз, когда я загружаю запрос, он автоматически попадает в кеш (это [NSURLCache sharedCache]
). Но в следующий раз, когда я загружаю тот же запрос, NSURLConnection, похоже, игнорирует то, что находится в кеше, и перезагружает данные.
Должен ли я вручную применять поиск кеша и возвращать кэшированные данные? Неужели NSURLConnection не делает этого? Или есть какой-то способ заставить инфраструктуру использовать кеш без проблем?
UPDATE: Попробовал следующий без успеха:
- Настройка политики кэширования запроса на
NSURLRequestReturnCacheDataElseLoad
вместоNSURLRequestUseProtocolCachePolicy
- Повторное использование объекта запроса вместо того, чтобы сделать новый
- Использование
+[NSURLConnection sendSynchronousRequest:returningResponse:error:]
вместо асинхронного погрузки
Вы подаете им тот же объект NSURLRequest? В документации указано, что NSURLCache работает путем сопоставления определенного объекта NSURLRequest с указанными данными ответа, поэтому вполне возможно, что даже если вы делаете запрос на тот же URL-адрес, это все равно приведет к промаху в кеше. – ImHuntingWabbits
Нет, я создаю новый NSURLRequest. Но когда я делаю '[[NSURLCache sharedURLCache] cachedResponseForRequest:]' с этим новым объектом запроса, есть кешированный ответ. Поэтому NSURLCache каким-то образом знает, что запросы одинаковы. – jasoncrawford
PS: Я попытался повторно использовать объект NSURLRequest. Не имеет значения. – jasoncrawford