Desarrollando un iPad PDF-Reader decidimos preparar imágenes de alta resolución de renderizado de páginas intensivas (muchas rutas) y usarlas en lugar de las páginas pdf para evitar problemas de rendimiento. Decidimos que 3*768 by 3*1024
es un buen compromiso entre la legibilidad y el rendimiento de representación que resulta en ~ 1.5 MB jpegs.¿Por qué es UIImageView tan intensivo en memoria en comparación con CGContextDrawImage?
Sin embargo, probamos dos implementaciones para mostrar las páginas de imágenes. Uno que usa una subclase CATiledLayer
que también es responsable de manejar las páginas PDF "normales" (dibujo con CGContextDrawImage
) y otra que usa UIImageView
. Este último tiene la ventaja de que la visualización y el zoom es muy rápido, pero el uso de memoria es realmente malo: toma aproximadamente 30 MB en la memoria (lo cual es consistente con el tamaño del mapa de bits de la imagen). El otro enfoque (CATiledLayer
) necesita más tiempo para mostrar primero la página y necesita otros dos segundos para volver a renderizar después del zoom (similar a las páginas en PDF, pero mucho más rápido) pero no ocupa más memoria de la que necesita para mostrar un tamaño mucho más pequeño imagen o una página PDF.
¿Alguien sabe lo que está sucediendo entre bastidores y si es posible combinar el uso de poca memoria de CGContextDrawImage
con un alto rendimiento de UIImageView
mediante el uso de Quartz Framework.
Muchas gracias por esta respuesta detallada e ilustrativa. A pesar de que el proyecto que realmente pedí, está hecho, estoy seguro de que su explicación será útil para los próximos números y, si no, es bueno saberlo. –