memoria - ¿Cómo invalido la caché de iOS para una URL en particular?
como limpiar mi iphone de archivos basura (3)
La solución resulta no invalidar la memoria caché de una URL existente, sino establecer:
request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
Cuando realiza la próxima solicitud del recurso que sabe que es inválida. Hay opciones para ignorar solo el caché local, o para solicitar que los proxies ascendentes también ignoren sus cachés. Consulte la documentación NSURLRequest / NSMutableURLRequest para más detalles.
Usando el almacenamiento en caché predeterminado de NSURLSession
, ¿cómo invalido el caché para una URL en particular?
removeCachedResponseForRequest:
método removeCachedResponseForRequest:
, pero eso toma un objeto NSURLRequest
, que no tengo para la solicitud original. ¿Debo guardarlos a medida que los creo para poder pasarlos de nuevo a removeCachedResponseForRequest:
o puedo crear uno nuevo con la URL adecuada que servirá como equivalente para el propósito, incluso si no tiene el mismos campos de encabezado y otras propiedades como el original?
Si desea ir más lejos, puede restablecer la respuesta en caché para la solicitud de url que desea forzar la recarga. Haciendo lo siguiente:
let newResponse = NSHTTPURLResponse(URL: urlrequest.URL!, statusCode: 200, HTTPVersion: "1.1", headerFields: ["Cache-Control":"max-age=0"])
let cachedResponse = NSCachedURLResponse(response: newResponse!, data: NSData())
NSURLCache.sharedURLCache().storeCachedResponse(cachedResponse, forRequest: urlrequest)
Como el encabezado de control de caché de la respuesta tiene una edad máxima de 0 (forzado), la respuesta nunca se devolverá cuando realice esta solicitud.
Su respuesta funciona bien para forzar una única solicitud, pero si desea tener dos versiones de la solicitud forzando y otra confiando en la respuesta almacenada en caché, se desea eliminar la almacenada en caché una vez que fuerce una solicitud.