Desde OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
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:
- Implemente el método applicationDidReceiveMemoryWarning: del delegado de su aplicación.
- Anule el método didReceiveMemoryWarning en su subclase UIViewController personalizada.
- Regístrese para recibir la notificación UIApplicationDidReceiveMemoryWarningNotification.
¿Cómo reducir la huella de memoria de su aplicación?
- Elimina pérdidas de memoria.
- Haga que los archivos de recursos sean lo más pequeños posible.
- Utilice Core Data o SQLite para grandes conjuntos de datos.
- Carga recursos de forma perezosa.
- Construya su programa usando la opción Thumb.
Detalles en http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
¿Cómo asignar la memoria sabiamente?
- Reduzca el uso de objetos liberados automáticamente: con el conteo automático de referencias (ARC), es mejor asignar / iniciar objetos y dejar que el compilador los libere en el momento adecuado. Esto es cierto incluso para los objetos temporales que en el pasado podría haber liberado automáticamente para evitar que vivan más allá del alcance del método actual.
- Imponga límites de tamaño a los recursos : evite cargar un archivo de recursos grande cuando uno más pequeño es suficiente. En lugar de usar una imagen de alta resolución, use una que tenga el tamaño adecuado para dispositivos basados en iOS. Si debe utilizar archivos de recursos grandes, busque formas de cargar solo la parte del archivo que necesita en un momento dado. Por ejemplo, en lugar de cargar todo el archivo en la memoria, utilice las funciones mmap y munmap para asignar partes del archivo dentro y fuera de la memoria. Para obtener más información sobre cómo asignar archivos a la memoria.
- Evite los conjuntos de problemas ilimitados : los conjuntos de problemas ilimitados pueden requerir una cantidad arbitrariamente grande de datos para calcular. Si el conjunto requiere más memoria de la disponible, es posible que su aplicación no pueda completar los cálculos. Sus aplicaciones deben evitar tales conjuntos siempre que sea posible y trabajar en problemas con límites de memoria conocidos.