2009-07-22 12 views
5

Estoy cargando varios UIViews en un UIScrollView y estoy tratando de rastrear por qué están usando tanta memoria. Después de un proceso de eliminación utilizando instrumentos, descubrí que establecer el color de fondo de las vistas aumenta el uso de la memoria 4 veces.Establecer el color de fondo de un UIView aumentando el uso de la memoria

Si no configuro el color de fondo, el uso de memoria se sitúa en alrededor de 4.5 megas. Tan pronto como configuro el color de fondo para cualquier color rojoColor o clearColor, el uso de la memoria salta a 17 megas.

Aquí está el código:

ThumbnailView *thumbView = [[ThumbnailView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 225.0f, 320.0f)]; 
thumbView.tag = aCounter; 
thumbView.backgroundColor = [UIColor clearColor]; 

¿Alguien sabe qué podría estar causando esto?

Lo que realmente quiero después es tener el fondo claro. Si no hay forma de evitar esto, ¿hay alguna otra forma de establecer el fondo de una UIView que sea clara?

+0

Tengo exactamente el mismo problema. si no configuro el color de fondo claro, las vistas aparecen con un fondo negro. ¿Cuál fue tu solución? –

Respuesta

12

Todas las instancias de UIView (y las clases derivadas de ella) tienen un objeto CALayer asociado (al que se accede mediante la propiedad de capa) que proporciona la apariencia visual de UIView. El CALayer puede tener su propio mapa de bits, puede compartir un mapa de bits con otro objeto CALayer (que es cómo se realizan las reflexiones) o puede no tener mapa de bits.

Cuando una UIView actúa como un contenedor para otros controles, no tiene un mapa de bits asociado a su capa, por lo tanto, utiliza muy poca memoria. Tan pronto como configure su color de fondo, ese mapa de bits de respaldo debe crearse para que haya algo que renderizar. Si la subclase UIView implementa drawRect para dibujar algunos gráficos en la vista, ocurrirá lo mismo.

Dado que una vista del tamaño de una pantalla completa consume mucha memoria, cuando implemente una solución basada en UIScrollView, solo debería cargar las vistas que se muestran y las dos a cada lado. No crees montones de ellos por adelantado.

+0

Esta respuesta me ayuda mucho, me preocupaba el uso de memoria de UIView muy grande (usado como contenedor). – ideawu

Cuestiones relacionadas