Desde mi experiencia, Las soluciones basadas en el rendimiento y la memoria se encuentran en los extremos opuestos de un control deslizante. Puede moverse con su solución en algún lugar entre estos dos, pero con la desventaja de que tener la mejor solución en cuanto al rendimiento, generalmente significa una peor solución en cuanto a la memoria y viceversa. Espero que he explicado suficientemente claro :)
Aquí es cómo manejar el problema de las imágenes carga diferida:
En mi solicitud me creó una entidad que llamé GlobalImageProvider. Todas las solicitudes de imágenes pasan por esta entidad. De esta forma tengo control sobre cuántos hilos uso para descargar y puedo implementar un sistema de almacenamiento en caché (memoria + disco local), todos ellos completamente transparentes para la aplicación y con control total. Al controlar el tamaño de la memoria caché, puedo controlar qué tan rápido se siente la aplicación. En cuanto a rendimiento, nada se compara con tener un UIImage
ya creado en la memoria. En cuanto a la memoria, incluso puede optar por deshabilitar la memoria caché.
Aún más, puedo incluso cambiar el número de subprocesos dinámicamente mientras la aplicación se está ejecutando dependiendo de la calidad de la red que tengo.
Para realizar las solicitudes en línea, estoy usando NSURLConnection
pero planeo cambiar a otra cosa ya que he leído que pierde memoria.
En el lado vista & controladores, tengo un AsyncImageView
que se encuentra a UIImageView
que sabe cómo trabajar con el GlobalImageProvider
. Sabe mostrar un indicador de actividad durante la carga y puede manejar la respuesta desde GlobalImageProvider
.
Si conoce la URL de la imagen que desea, todo lo que necesita hacer es agregar un AsyncImageView
a su pantalla y realizar una solicitud al GlobalImageProvider
con el AsyncImageView
como el "controlador" de esa imagen.
Si no le gusta mezclar datos con las vistas de imagen, puede agregar ViewController entre GlobalImageProvider y AsyncImageView. Obtiene la respuesta de imagen y la pone en ImageView.
Eso es todo, espero que te ayude un poco.