2011-08-23 13 views
9

A pesar de la documentación de Apple indicating otherwise, NSURLCache en iOS no hace ningún almacenamiento en disco (flash) en absoluto. Puede subclase NSURLCache para cambiar el comportamiento de las operaciones de búsqueda y almacenamiento para usar el disco (como SDURLCache), pero debido a las siguientes limitaciones severas de cómo se usa e implementa la memoria caché, esto no funciona tan bien como usted ' d esperar:NSURLConnection en iOS no intenta almacenar en caché objetos de más de 50 KB

  • NSURLConnection ni siquiera llamar storeCachedResponse:forRequest: de archivos a través de alrededor de 50 KB (> = 52428 bytes, para ser exactos). Esto hace que la subclasificación NSURLCache no tenga sentido para nuestro uso (imágenes de 200KB), ya que ni siquiera llegará a la memoria caché. Como resultado, tenemos que agregar el almacenamiento en caché manualmente en un nivel superior a NSURLConnection.
  • Incluso cuando uno llama manualmente al storeCachedResponse:forRequest: del NSURLCache incorporado, solo almacena la respuesta en la memoria si es inferior a aproximadamente 180 KB. Probé esto llamando manualmente a storeCachedResponse y viendo que el antes/después de currentMemoryUsage no cambió para longitudes de datos superiores a aproximadamente 180 KB. Así que tenemos que escribir nuestro propio almacenamiento en memoria caché LRU también.

¿Alguien más ha notado estos problemas? ¿O hay algo que me falta?

FYI, estoy corriendo iOS 4.3 en el simulador y en un iPad 2.

Respuesta

1

me gustaría sugerir el uso de la biblioteca y three20 TTURLRequest. Esto parece tener un buen almacenamiento en caché para tamaños de datos grandes, ya que se usa para Facebook y, en particular, para las imágenes.

TTURLRequest es más o menos una gota en el reemplazo para un NSURLRequest, por lo que debe ser fácil de mover a, y no tiene mucha dependencia en el resto de Three20

2

No estoy seguro de cómo funciona para un UIWebvieuw, pero cuando se utiliza un NSURLRequest el tamaño máximo del archivo depende sobre cómo inicializar el URLCache (initWithMemoryCapacity: (NSUInteger) memoryCapacity ...)

Cuestiones relacionadas