Jetsam monitoriza el uso de la memoria y elimina las aplicaciones que no son buenos ciudadanos de la memoria. Un buen ciudadano de la memoria es una aplicación que está dispuesta a devolver la memoria cuando se le pide y no sigue pidiendo más memoria.
Para ser un buen ciudadano de la memoria y no ser eliminado por Jetsam, una aplicación debe utilizar las siguientes técnicas:
- Inicializadores perezosos en cualquier objeto que pueda requerir una cantidad sustancial de memoria y que pueda ser fácilmente recreado.
- NSCache combinado con NSPurgeableData para cualquier recurso de memoria grande que provenga de una fuente externa y que requiera ciclos de CPU sustanciales para ser recreado. Esto es particularmente útil para cosas como imágenes de avatares procesadas cargadas desde la web o una base de datos. Por ejemplo, si tienes celdas CollectionView que utilizan imágenes individuales para cada celda y esas imágenes tienen algo así como una máscara circular, puedes almacenar en caché la imagen para reutilizarla y vaciar la caché cuando la memoria sea necesaria. Esto acelerará el rendimiento de tu app y le permitirá ser un buen ciudadano devolviendo memoria cuando se le solicite.
- Transmisión de datos de archivos que necesitan ser procesados en lugar de cargar todos los datos en la memoria. Si la aplicación necesita procesar un archivo grande para extraer información, el uso de la memoria de acceso al archivo puede reducir enormemente la huella de memoria y mantener su globo de lo que podría desencadenar Jetsam.
- En el ViewController’s viewDidDisappear, nil hacia fuera cualquier recurso que puede ser fácilmente recreado en viewWillAppear. Esto es importante para minimizar su huella en el fondo si su aplicación se ejecuta en el fondo. Lo mismo ocurre con el método applicationDelegate applicationDidEnterBackground:
- Monitorea el método applicationDelegate applicationDidReceiveMemoryWarning:, y el método ViewController didReceiveMemoryWarning para liberar los recursos recreables señalados anteriormente.
- Utiliza la herramienta de asignación de perfiles con el recuento de referencias activado para comprobar que no tienes ciclos de referencia que impidan la liberación de recursos.
- En modo de prueba/debug, puedes hacer que tu aplicación llame a los métodos memoryWarning por sí misma y ver si la memoria se libera.
Una nota importante sobre Jetsam, parece ser muy importante que una aplicación esté dispuesta a ceder algo de memoria. Esto es tan importante o más que la cantidad absoluta de memoria utilizada. Así que si tu aplicación utiliza 50MB o 150MB, tiene que ser capaz de devolver algo de memoria cuando se le pida con el fin de evitar ser asesinada por Jetsam.
Aquí hay un vídeo muy bueno dado por Conrad Kramer sobre Jetsam y cómo mantenerse vivo.