AFNetworking: ¿Cómo funciona el time de caching para requestes e imágenes?

Estoy usando el framework AFNetworking para iOS.

  1. ¿El caching está controlado por el encabezado de respuesta HTTP?
    • En caso afirmativo, se basa en los encabezados ' Cache-Control ' y ' Expires ' para las requestes normales?
    • Si no es así, ¿cómo funciona el almacenamiento en caching?
  2. Puede personalizar el time de caching y lo arregló en 1 día, independientemente de los encabezados de respuesta HTTP?
  3. Si hay caching de imágenes, ¿se almacena en el disco o se guarda en la memory?
  4. ¿Las requestes de caching funcionan cuando el dispositivo no tiene connection a Internet?
    • El usuario realiza una request pero el dispositivo no muestra connection a internet y la request fue suspendida. Puede ignorar las mismas requestes cuando el dispositivo regresa a su connection a Internet?
  5. ¿La única forma en que mi aplicación funcionaría sin connection usando una database o se puede basar en el caching del sistema de este marco?
  6. Puede cambiar el time de espera de las requestes sin tener que personalizar una " NSURLRequest "?

¿El caching está controlado por el encabezado de respuesta HTTP?

Sí; así es como NSURLCache decide si y durante cuánto time almacenar datos.

Se basa en los encabezados 'Cache-Control' y 'Expira' para las requestes normales?

Sí, aunque notablemente a veces ignorará las requestes de caching si el período de caching es demasiado corto. Lamentablemente, esto no es un comportamiento documentado.

Puede personalizar el time de caching y lo arregló en 1 día, independientemente de los encabezados de respuesta HTTP?

Para get más control sobre el almacenamiento en caching, puede usar SDURLCache: https://github.com/rs/SDURLCache AFNetworking recomienda esta biblioteca en sus preguntas frecuentes.

Si hay caching de imágenes, ¿se almacena en el disco o se guarda en la memory?

Para requestes generales, el desarrollador lo puede configurar (consulte la documentation de NSURLCache).

Para UIImageView + AFNetworking, se utiliza un NSCache además de NSURLCache, que proporciona memory caching.

¿Las requestes de caching funcionan cuando el dispositivo no tiene connection a Internet?

Sí, pero el caching se puede invalidar en cualquier momento, así que no confíes en esto.

El usuario realiza una request pero el dispositivo no muestra connection a internet y la request fue suspendida. Puede ignorar las mismas requestes cuando el dispositivo regresa a su connection a Internet? ¿La única forma en que mi aplicación funcionaría sin connection usando una database o se puede basar en el caching del sistema de este marco?

Puede comprobar manualmente una respuesta almacenada en caching después de que tenga su NSURLRequest:

NSMutableURLRequest *request = [myHTTPClient requestWithMethod:@"GET" path:path parameters:parameters]; NSCachedURLResponse *cachedResponse = [[NSURLCache shanetworkingURLCache] cachedResponseForRequest:request]; if (cachedResponse) { // Use response } 

Puede cambiar el time de espera de las requestes sin tener que personalizar una "NSURLRequest"?

No está listo, pero puede anular el método que crea NSMutableURLRequest en su subclass para cambiarlo por cada uno. Este método es requestWithMethod:path:parameters: