Estoy creando una aplicación para iPhone que extraerá datos de una API web, incluidas las direcciones de correo electrónico. Me gustaría mostrar una imagen asociada a cada dirección de correo electrónico en las celdas de la tabla, por lo que estoy buscando en la Libreta de direcciones las imágenes y recurriendo a un valor predeterminado si la dirección de correo electrónico no está en el libro. Esto funciona muy bien, pero tengo algunas preocupaciones:¿Cuál es el mejor enfoque para el almacenamiento en caché de imágenes asíncronas en el iPhone?
Rendimiento: Las recetas que he encontrado para buscar una dirección de registro de libro de dirección de correo electrónico (o número de teléfono) se informa rather slow. La razón de esto es que debe iterar sobre cada registro de la libreta de direcciones, y para cada uno que tenga una imagen, itere sobre todas las direcciones de correo electrónico para encontrar una coincidencia. Esto puede consumir mucho tiempo para una libreta de direcciones grande, por supuesto.
Celdas de tabla: Así que pensé en reunir todas las direcciones de correo electrónico para las que necesito encontrar imágenes y encontrarlas todas a la vez. De esta manera, repito el libro una sola vez para todas las direcciones. Pero esto no funciona bien para las celdas de la tabla, donde cada celda corresponde a una sola dirección de correo electrónico. Tendría que reunir todas las imágenes antes de mostrar las celdas (potencialmente lentas) o hacer que cada celda busque cada imagen a medida que se carga (incluso más lenta, ya que necesitaría repetir el libro para encontrar una coincidencia para cada dirección de correo electrónico).
asíncrono de búsqueda: Así que pensé en mirar hacia arriba a granel, pero de forma asíncrona, usando
NSInvocationOperation
. Para cada imagen encontrada en AddressBook, guardaría una miniatura en el arenero de la aplicación. Entonces cada celda podría simplemente hacer referencia a este archivo y mostrar el predeterminado si no existe (porque no está en el libro o aún no se ha encontrado). Si la imagen se encuentra más tarde en la búsqueda asincrónica, la próxima vez que se muestre la imagen aparecerá de repente. Esto podría funcionar bien para la regeneración periódica de imágenes (por ejemplo, cuando las imágenes se han cambiado en la libreta de direcciones). Pero luego, para cualquier instancia determinada de mi aplicación, una imagen puede no aparecer por un tiempo.asíncrono Tabla celular de búsqueda: Idealmente, me gustaría usar algo así como markjnet's asynchronous table cell updating para actualizar celdas de la tabla con una imagen una vez que se ha descargado. Pero para que esto funcione, tendría que derivar un trabajo
NSInvocationOperation
para cada celda tal como se muestra y si el icono en la memoria caché no está en la caja de arena. Pero luego volvemos a iterar ineficazmente a través de la libreta de direcciones completa para cada uno, y eso puede ser muchos de ellos si acaba de descargar un montón de nuevas direcciones de correo electrónico.
Así que mi pregunta es: ¿Cómo hacen otros esto? Estuve jugando con Tweetie2, y parece que actualiza las celdas de la tabla de forma asincrónica. Supongo que envía una solicitud HTTP por separado para cada imagen que necesita. Si es así, me imagino que buscar en la libreta de direcciones local por correo electrónico no es menos eficiente, ¿quizás ese sea el mejor enfoque? ¿Simplemente no te preocupes por los problemas de rendimiento asociados con la búsqueda en la libreta de direcciones?
Si es así, ¿está guardando una imagen en miniatura en la caja de arena el mejor enfoque para el almacenamiento en caché? Y si quisiera crear un nuevo trabajo para actualizar todas las miniaturas con cualquier cambio en la libreta de direcciones, diga una vez al día, ¿cuál es el mejor enfoque para hacerlo?
¿Cómo resuelven el resto de ustedes este tipo de problema? ¡Las sugerencias serían muy apreciadas!
Gracias. Así que tarifa En realidad, he implementado una solución que busca una dirección a la vez, pero crea una miniatura y la guarda en el directorio de Documentos de la zona de pruebas. Y sí, solo busca las imágenes en la libreta de direcciones la primera vez que necesitan mostrarse.Creo que * cargar la imagen almacenada en caché desde la caja de arena debe ser lo suficientemente rápida como para que no tenga que ser asincrónica. No necesito el nivel de actualización que describe, así que, a continuación, voy a ver cómo programar actualizaciones periódicas de las miniaturas en caché, y sí, voy a iterar solo a través de la libreta de direcciones. una vez para todos ellos. – theory
Simplemente curioso, ¿cómo puede buscar una dirección a la vez, pero solo iterar una vez a través de la libreta de direcciones? – erikprice