Cómo deshabilitar el caching de AFNetworking

¿Es posible deshabilitar todas las funciones de caching de AFNetworking?

Estoy creando mi propio sistema de caching personalizado y no quiero que esto ocupe espacio en el disco también.

Gracias Ashley

La caching es manejada en toda la aplicación por NSURLCache . Si no configura un caching compartido, las requestes no se almacenan en caching. Incluso con un NSURLCache compartido, la implementación pnetworkingeterminada en iOS no es compatible con el caching de disco de todos modos.

Dicho esto, a less que tenga una razón muy particular para escribir su propio sistema de caching, recomiendo encarecidamente no hacerlo. NSURLCache es lo suficientemente bueno para el 99.9% de las aplicaciones: maneja las directivas de caching de las respuestas entrantes y las utiliza de manera adecuada con las nuevas requestes, y lo hace automáticamente de forma que es improbable que sea un cuello de botella de performance en su aplicación. Como alguien que ha desperdiciado incontables horas haciéndome uno mismo ( y más tarde tirándolo porque era completamente innecesario ), yo diría que hay lugares mucho mejores para enfocar tu atención al desarrollo.

Inicialmente encontré la respuesta de Jason Moore al trabajo, sin embargo, hace poco noté que mi aplicación todavía está almacenando requestes. No estoy usando la última networking AF, así que no sé si la caching se ha abordado en comstackciones más recientes.

El proyecto URLCache de Apple dice lo siguiente:

De forma pnetworkingeterminada, el sistema de carga de URL de Cocoa utiliza un pequeño caching de memory compartida. No necesitamos este caching, por lo que lo ponemos a cero cuando se inicia la aplicación.

Y luego hace esto para deshabilitar el caching.

 NSURLCache *shanetworkingCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; [NSURLCache setShanetworkingURLCache:shanetworkingCache]; [shanetworkingCache release]; 

Esto deshabilitará todo el almacenamiento en caching para toda su aplicación, que puede no ser ideal en algunas situaciones, pero como NSURLRequest no cumple con la política de caching solicitada, es la única opción que queda que puedo ver.

Descubrí en iOS 6 que las requestes a veces se almacenan en caching, incluso si la request tiene NSURLRequestReloadIgnoringCacheData . Agregar un bloque de respuesta de caching que devuelve nil impide que la request se almacene en caching.

 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20]; AFJSONRequestOperation *op = [AFJSONRequestOperation JSONRequestOperationWithRequest:request]; // DISABLE CACHE // [op setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) { return nil; }]; [op start]; 

Desafortunadamente ninguno de estos methods funcionó para mí. La única manera que he logrado para que la memory caching esté deshabilitada es la siguiente:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 

Esta es la respuesta original

 NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 

Esto puede depender de la implementación de su server, pero al agregar Cache-Control:no-store encabezado Cache-Control:no-store a su request de salida debe producirse una respuesta que contenga el mismo encabezado, lo que le NSURLCache a NSURLCache que no NSURLCache en caching la respuesta al disco.

En mi humilde opinión, este es un mejor enfoque que inhabilitar completamente el almacenamiento en caching de disco, especialmente si está escribiendo un código de SDK que será utilizado por otras aplicaciones que quieran utilizar NSURLCache .