instrumentos con iOS: ¿Por qué el Monitor de Memoria no está de acuerdo con las Asignaciones?

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

Gracias

Instrumentos Y U Lie?

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

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

El Instrumento de asignación solo marca la memory creada por malloc / [NSObject alloc] y algún búfer de marco, por ejemplo, el bitmap de image descomprimido no está incluido en el Instrumento de asignación, pero siempre toma la mayor parte de su memory.

Observe la ejecución de la aplicación iOS 242 de la session WWDC 2012: Memoria para get la información de Apple.

Creo que esto se debe a que el uso de memory de OpenGL ES está oculto de ObjectAlloc, pero se count en el Monitor de memory. Por ejemplo, ver las testings de zoul en su pregunta aquí , donde observa un ligero aumento en ObjectAlloc en la creación de una textura, pero luego esa memory desaparece de ese instrumento cuando se pasa a OpenGL ES. El monitor de memory aún rastrea esa memory de textura.

Esto debería include el aspecto visual de los elementos de la interfaz de usuario, como capas y vistas, ya que los usuarios de CALayers son efectivamente envoltorios para las texturas de OpenGL ES. La representación real de la image en 2D de los elementos de su interfaz de usuario no parece ser rastreada por ObjectAlloc, lo que lleva a los valores totales más bajos en ObjectAlloc.

ObjectAlloc sigue siendo bueno para el seguimiento de numbers y types de asignaciones, y es aún más valioso desde la llegada de la funcionalidad de almacenamiento dynamic. Solo desea asociarlo con el Monitor de memory para ver su verdadero uso general de memory.

El monitor de memory contará la mayoría o todos los resources que posee la aplicación, incluidos los asignados indirectamente en el nivel del kernel. Esto incluye la memory de video AFAIK (texturas, etc.) como sugirió Brad, pero también files asignados de memory y posiblemente estructuras de kernel de gran tamaño como sockets. La list probablemente sea bastante larga …

Cualquier código encapsulado dentro de las llaves de una llamada de despacho a GCD está protegido de dos cosas: informe de errores y, a veces, count de asignación. Por lo general, solo se aplica a CoreFoundation u otra cosa que no sea UIKit o que no sea NSFoundation.