Estoy tratando de recuperar la cantidad de memoria que usa mi aplicación de iPhone en cualquier momento, mediante programación. Sí, estoy al tanto de ObjectAlloc / Leaks. No estoy interesado en esos, solo para saber si es posible escribir algún código y obtener la cantidad de bytes que se utilizan e informar a través de NSLog.
Gracias.
ios
objective-c
iphone
cocoa-touch
memory
Coocoo4Cocoa
fuente
fuente
Respuestas:
Para obtener los bytes reales de memoria que usa su aplicación, puede hacer algo como el ejemplo siguiente. Sin embargo, debería familiarizarse con las diversas herramientas de creación de perfiles, ya que están diseñadas para ofrecerle una imagen mucho mejor del uso en general.
También hay un campo en la estructura info.virtual_size que le dará la cantidad de bytes de memoria virtual disponibles (o memoria asignada a su aplicación como memoria virtual potencial en cualquier caso). El código al que enlaza pgb le dará la cantidad de memoria disponible para el dispositivo y qué tipo de memoria es.
fuente
Los encabezados para
TASK_BASIC_INFO
decir:Aquí hay una versión que usa
MACH_TASK_BASIC_INFO
:fuente
Aquí se ha mejorado report_memory () para mostrar rápidamente el estado de la fuga en NSLog ().
fuente
Esto ha sido probado en Xcode 11 en Mojave 10.4.6 el 07/01/2019.
Todas las respuestas anteriores devuelven el resultado incorrecto .
A continuación, se explica cómo obtener el valor esperado escrito por Quinn de Apple, “¡El esquimal!”.
Esto usa la
phys_footprint
variable deDarwin > Mach > task_info
y coincide con el valor en el indicador de memoria en el navegador de depuración de Xcode .El valor devuelto está en bytes.
https://forums.developer.apple.com/thread/105088#357415
A continuación se muestra el código original.
Modificar esto ligeramente para crear un conjunto de métodos Swift a nivel de clase permite devolver fácilmente los bytes reales y la salida formateada en MB para su visualización. Utilizo esto como parte de una suite UITest automatizada para registrar la memoria utilizada antes y después de múltiples iteraciones de la misma prueba para ver si tenemos posibles fugas o asignaciones que debamos investigar.
¡Disfrutar!
Nota: un codificador emprendedor puede querer agregar un formateador estático a la clase para que
usedMBAsString
solo devuelva 2 lugares decimales significativos.fuente
Solución rápida de la respuesta de Jason Coco :
fuente
Swift 3.1 (a partir del 8 de agosto de 2017)
fuente
(1024*1024)
, no por1000000
, para obtener megabytes de bytes.Aquí hay una versión de Swift 3:
fuente
Versión Objective-C:
fuente
A continuación se muestra la respuesta correcta:
''
''
fuente