La respuesta de Graham Miln es muy completa, solo hay algunas notas que me gustaría agregar:
1) Una aplicación puede admitir Terminación automática o Terminación repentina o incluso ambas . La diferencia entre estos dos es que: con la terminación automática, el sistema puede salir de la aplicación "a voluntad", pero la cerrará "normalmente" (como si eligiera Quit <AppName>
del menú <AppName>
), permitiendo que la aplicación funcione algunos trabajan en quit, por lo que se puede restaurar nuevamente a ese estado cuando se vuelve a abrir. Con Sudden Termination, el sistema puede "matar" la aplicación "a voluntad" sin ninguna posibilidad de que la aplicación realice ninguna acción antes de morir, ya que morirá instantáneamente, lo cual es mucho más rápido.
2) Las aplicaciones pueden admitir cualquier forma de terminación sin declararla en su archivo Info.plist
, por lo que el grep
que no incluye una aplicación no significa que la aplicación no admita ninguna de las funciones. En realidad, la entrada Info.plist
solo cambia el comportamiento predeterminado de una aplicación. El comportamiento predeterminado es no admitir ninguno, a menos que el código lo habilite explícitamente. Cuando se declara en su archivo Info.plist
, el comportamiento es al revés: la función declarada está habilitada de forma predeterminada, a menos que el código lo deshabilite explícitamente.
3) La razón para controlar estas funciones en el código es que solo la aplicación en sí puede saber si actualmente está realmente inactiva o esperando a que ocurra algún evento y, por lo tanto, no debe morir en este momento. Por lo tanto, una aplicación puede desactivar ambos temporalmente mientras se espera que ocurra algo o se procesan algunos datos internamente y luego se vuelven a encender una vez que están listos.
4) En ambos casos, el sistema decide cuándo finalizar una aplicación y cuándo no ("a voluntad") y en muchos casos el sistema simplemente no lo desea, ya que no tiene ninguna razón para hacerlo. P.ej. si el sistema se queda sin memoria, buscará de forma agresiva las aplicaciones que puede terminar para liberar rápidamente la memoria para aquellos que continuarán ejecutándose, pero siempre que no haya escasez, ¿qué ventaja tendría para el sistema eliminar estas aplicaciones? ? La próxima vez que los use, solo es necesario reiniciarlos, lo que es una pérdida de tiempo de procesamiento cuando no había ninguna razón para dejarlos en primer lugar. Y la falta de memoria no se define por la cantidad de memoria libre que tiene (no tiene falta solo porque toda la memoria parece estar en uso), sino por la llamada "presión de memoria". Activity Monitor puede mostrarle la presión de memoria de su sistema. Entonces, solo porque una aplicación admite cualquier forma de terminación, no se dice que el sistema realmente usará esa característica.
5) Con la introducción de los servicios XPC en 10.8, algunas aplicaciones comenzaron a usar estos pequeños ayudantes para realizar sus tareas de procesamiento. Los servicios XPC soportan implícitamente la terminación repentina. A pesar de pertenecer a una aplicación, los Servicios XPC no muestran ninguna IU (y no aparecen en el Dock), por lo que no notará cuándo se inician y cuándo se cancelan. Eso significa que, en lugar de que el sistema finalice la aplicación completa para ahorrar recursos, las aplicaciones que utilizan muchos recursos pueden usar los Servicios de XPC y el sistema terminará estos servicios de XPC si es necesario, lo que a menudo hace innecesario que la propia aplicación sea compatible con cualquiera de las formas de terminación como la terminación de La aplicación ahora difícilmente ahorrará al sistema una gran cantidad de recursos si el uso principal de los recursos es causado por los Servicios XPC de esa aplicación.