iphone ios ipad memory-management xcode-instruments

iphone - instrumentos con iOS: ¿por qué Memory Monitor no está de acuerdo con las asignaciones?



ipad memory-management (4)

Como se puede ver en esta captura de pantalla de los instrumentos, Allocations piensa que mi aplicación (Ongo) solo usa 7.55 MB de memoria, mientras que el Monitor de memoria dice 53.30. Además, la memoria del sistema libre tiene poca o ninguna correlación con la cantidad de memoria que está usando la aplicación. ¿Alguien sabe por qué hay un gran desacuerdo entre estas dos herramientas? Además, ¿es posible encontrar la fuente de la memoria baja del sistema o cómo evitar que se agote tan rápido? Mi aplicación no parece estar perdiendo memoria, pero de alguna manera está agotando los recursos del sistema.

Gracias


Creo que esto se debe al hecho de que el uso de la memoria de OpenGL ES está oculto de ObjectAlloc, pero se cuenta en el Monitor de la memoria. Por ejemplo, vea las pruebas de zoul en su pregunta here , donde observa un ligero aumento en ObjectAlloc en la creación de una textura, pero luego esa memoria desaparece de ese instrumento cuando pasa a OpenGL ES. Memory Monitor sigue rastreando esa memoria de textura.

Esto debería incluir el aspecto visual de los elementos de la interfaz de usuario, como capas y vistas, porque los CALayers son envoltorios efectivos para las texturas de OpenGL ES. La representación real de la imagen en 2D de los elementos de la UI no parece ser rastreada por ObjectAlloc, lo que conduce a los valores totales más bajos en ObjectAlloc.

ObjectAlloc sigue siendo bueno para rastrear números y tipos de asignaciones, y es aún más valioso desde el advenimiento de la funcionalidad heapshot. Solo desea asociarlo con el Monitor de memoria para ver su verdadero uso general de la memoria.


Cualquier código encapsulado dentro de las llaves de una llamada de despacho a GCD está protegido de dos cosas: informes de errores y, a veces, recuento de asignaciones. Eso generalmente solo se aplica a CoreFoundation o cualquier otra cosa que no sea UIKit o no NSFoundation.


El monitor de memoria contará la mayoría o todos los recursos que posee la aplicación, incluidos los asignados indirectamente a nivel del kernel. Esto incluye la memoria de video AFAIK (texturas, etc.) como sugirió Brad, pero también archivos mapeados en memoria y posiblemente estructuras de kernel grandes como zócalos. La lista es probablemente bastante larga ...


Para aquellos que ven esta publicación después del año 2012:

La memoria realmente cargada en la memoria física del dispositivo es la memoria residente en el instrumento VM Tracker.

El instrumento de asignación solo marca la memoria creada por malloc / [NSObject alloc] y parte del buffer de la estructura, por ejemplo, el mapa de bits de la imagen descomprimida no se incluye en el instrumento de asignación pero siempre ocupa la mayor parte de la memoria.

Mire WWDC 2012 Session 242 iOS App Performance: Memory para obtener la información de Apple.