2011-07-25 12 views
13

He estado probando un controlador de vista de iPhone que usa un UIWebView para cargar contenido externo, a diferencia de los recursos en el paquete del proyecto. Otro ingeniero se dio cuenta de que la vista web no estaba en la memoria caché, así que investigué. Algunas preguntas anteriores indicaban que UIWebView simplemente no podía almacenar en caché el contenido externo.¿Cuándo comenzó a funcionar el almacenamiento en caché en un UIWebView?

anterior SO Preguntas sobre UIWebView almacenamiento en caché:

esos puestos eran bastante desinflado, pero me di cuenta que todos ellos fueron hechas antes de iOS 4.0 salió. Probé el siguiente enfoque para el almacenamiento en caché, que parecía bastante directo.

NSURLRequest *request = [NSURLRequest requestWithURL:myUrl 
     cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30]; 
[webView loadRequest:request]; 

Esto parece funcionar muy bien en iOS 4.3 pero no funciona en absoluto en iOS 3.0. Probé esto apuntando los dispositivos a un Charles proxy (en iPhone, Configuración -> WiFi, proxy manual) y registrando el tráfico a mi servidor.

¿UIWebView comenzó a observar la política de caché en iOS 4.0? ¿Alguien más puede confirmar esto o solo estoy imaginando cosas?

+1

He probado en iOS 4.0 con ninguna política de caché, simplemente '[NSURLRequest requestWithURL: myURL] 'y parecía cargar desde la memoria caché – goldierox

+0

Creo que este enlace le ayudará a ... http: // stackoverflow .com/questions/2352841/does-disk-caching-with-nsurlrequest-and-nsurlconnection-actually-work-on-the-iph? rq = 1 – junaidsidhu

Respuesta

-1

acabo de comprobar NSURLRequest.h

La mayor parte del código en iOS SDK, que tiene una aseveración de versiones tiene una sentencia if, algo como esto:

#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED 

Pero el método

- (id)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval; 

no parece tener tal cosa, por lo tanto, supongo que ha estado allí para siempre.

+1

El método ha estado en uso desde Mac OS X desde la versión 10.2, por lo que es estado en iOS durante toda su existencia. La pregunta es cuánto tiempo UIWebView ha aplicado correctamente la política de caché especificada. – goldierox

-2
NSURLCache* theCache = [NSURLCache sharedURLCache]; 
[theCache setMemoryCapacity:4 * 1024 * 1024]; 
[theCache setDiskCapacity:512*1024]; 

[NSURLRequest requestWithURL:appURL cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]; 
+3

Esto no responde nada. – goldierox

3

Sí, en IOS 4.0 el caché comenzó a trabajar.

Hay una clase en el marco de Foundation que se encarga de manejar esto, es NSCache. Ha estado en Mac OS X desde hace años, pero no se implementó en iOS hasta iOS 4.0. Incluso entonces se implementó solo parcialmente: no admitía el almacenamiento en caché de disco, sino solo el almacenamiento en memoria caché (por lo que el caché era poco confiable debido a que la memoria se liberaba cuando el sistema lo solicitaba).

NSCache recibió una actualización en iOS 5.0 que agregó compatibilidad con el almacenamiento en caché de disco y ahora funciona igual que la versión de Mac y se puede usar sin problemas.

+0

Eso es algo extraño, dado que iOS no comenzó a admitir el almacenamiento en caché de disco hasta 5.0. Volví y probé de nuevo, y iOS 4.0 tiene un caché ligeramente impredecible, mientras que iOS 5.0 funciona como se esperaba. Esto probablemente se deba al hecho de que el almacenamiento en caché de disco no se implementó por completo hasta entonces. – goldierox

+0

Vaya, tengo la línea de tiempo equivocada. Verifique la respuesta editada, debería ser correcta ahora. ;) – EliaCereda

Cuestiones relacionadas