Con respecto al arte negro de administrar la memoria en dispositivos iPhone OS: ¿qué significan los diferentes niveles de advertencia de memoria? ¿Nivel 1? ¿Nivel 2? ¿El dial va a las 11?
Contexto: Después de un extenso período de prueba de estrés de la memoria, incluida la ejecución de mi aplicación de iPad con la aplicación de reproducción de música del iPod, me inclino a ignorar las advertencias de memoria aleatorias pero poco frecuentes que estoy recibiendo. Mi aplicación nunca falla. Siempre. Mi aplicación no tiene fugas. Y, bueno, las advertencias de los mems simplemente no parecen importar.
Gracias
Doug
fuente
SpringBoard registra las advertencias de nivel de memoria. Como desarrollador de aplicaciones, no necesita preocuparse por ello. Con solo responder
-{application}didReceiveMemoryWarning
es suficiente.Hay 4 niveles de advertencias (0 a 3). Estos se configuran desde el observador de memoria del kernel y se pueden obtener mediante la función no tan pública
OSMemoryNotificationCurrentLevel()
.No se documenta cómo se activan los niveles. SpringBoard está configurado para hacer lo siguiente en cada nivel de memoria:
SpringBoard no maneja la eliminación de la aplicación activa (jetsam), pero
launchd
.fuente
libsystem_c.dylib
. Sería genial si pudiera seguir adelante y usarlo. GraciasDesde OSMemoryNotification.h ,
total de 5 niveles de advertencia de memoria (-1,3).
Con respecto a la descripción de la advertencia del nivel de memoria, la respuesta de @ KennyTM es excelente.
Quiero agregar varios puntos relacionados que pueden ayudar a PM y a otros.
¿Qué debe hacer cuando tiene una advertencia de nivel de memoria?
Al recibir cualquiera de estas advertencias, su método de manejo debería responder liberando inmediatamente cualquier memoria innecesaria. Por ejemplo, el comportamiento predeterminado de la clase UIViewController es purgar su vista si esa vista no está visible actualmente; Las subclases pueden complementar el comportamiento predeterminado purgando estructuras de datos adicionales. Una aplicación que mantiene un caché de imágenes puede responder publicando cualquier imagen que no esté actualmente en pantalla.
¿Cómo observar la advertencia de nivel de memoria?
De http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Cuando el sistema envía una advertencia de poca memoria a su aplicación, responda de inmediato. iOS notifica a todas las aplicaciones en ejecución siempre que la cantidad de memoria libre desciende por debajo de un umbral seguro. (No notifica las aplicaciones suspendidas). Si su aplicación recibe esta advertencia, debe liberar tanta memoria como sea posible. La mejor manera de hacer esto es eliminar las referencias fuertes a cachés, objetos de imagen y otros objetos de datos que se pueden volver a crear más adelante.
UIKit proporciona varias formas de recibir advertencias de poca memoria, incluidas las siguientes:
¿Cómo reducir la huella de memoria de su aplicación?
Detalles en http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
¿Cómo asignar la memoria sabiamente?
fuente