Pregunta

Estoy cargando una serie de UIViews en una vista UIScrollview e intento rastrear por qué están usando tanta memoria. Después de un proceso de eliminación utilizando instrumentos, he descubierto que establecer el color de fondo de las vistas aumenta el uso de la memoria en 4 veces.

Si no configuro el color de fondo, el uso de la memoria se encuentra en alrededor de 4.5megs. Tan pronto como configuré el color de fondo en cualquier cosa RedColor o ClearColor, el uso de la memoria salta a 17 megs.

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 busco es tener el fondo claro. Si no hay forma de evitar esto, ¿hay otra forma de establecer el fondo de un UIView para que sea claro?

¿Fue útil?

Solución

Todas las instancias de UIView (y las clases derivadas de él) tienen un objeto Calayer asociado (accedido a través de 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 no puede tener mapa de bits.

Cuando un UIView actúa como un contenedor para otros controles, no tiene mapa de bits asociado con su capa, por lo que usa muy poca memoria. Tan pronto como establece 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, sucederá lo mismo.

Debido a que una vista de tamaño completo consume mucha memoria, cuando implementa una solución basada en UIScrollView, solo debe cargar las vistas que se muestran y las dos a ambos lados. No cree un montón de ellos por adelantado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top