2011-02-18 8 views
6

Quiero saber, cuál es la mejor manera para la carga lenta. Para mí, la mayoría de las aplicaciones que he usado analizan y obtienen la URL del servidor y colocan la imagen en la vista de tabla. Así que he implementado la carga diferida para mejorar el rendimiento de la aplicación. Ahora quiero saber el mejor método para cargar imágenes perezosas. Debido a que he utilizado carga diferida en las cuatro maneras,¿Cuál es la mejor manera para que Lazy cargue imágenes en iPhone?

  • imágenes carga diferida de Apple developer.com

  • método asíncrono Implementado para mejorar la carga diferida

  • Se utiliza hilo principal separada para la manipulación la imagen descargada

  • He utilizado la aplicación ECOImageLoadingDemo para la carga diferida.

Pero he utilizado los cuatro métodos anteriores para lograr la carga diferida. Pero quiero saber cuál es el mejor método para la carga lenta. ¿Cuál es el mejor para el rendimiento y la memoria es adecuado para eso?

Gracias de antemano.

Saludos,

Pugal

Respuesta

4

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.

Cuestiones relacionadas