Tuve un problema real con esto. Hay un gran punto para salir de forma manual o prgramática.
Con el iPhone OS anterior, mi aplicación estaba escribiendo su estado (primer uso o segunda vez en adelante, etc.) en un plist cuando terminó. Cuando el usuario regresó, quería mostrar cosas diferentes leyendo el plist. Además, quería mostrar la primera pantalla cada vez que el usuario regresaba después de salir.
Con la aplicación suspendida en segundo plano con iPhone OS4, la aplicación vuelve a donde se quedó (es decir, muestra la misma pantalla donde estaba el usuario) y nunca cambia el estado de la misma porque applicationWillTerminate ahora nunca se llama.
Porque este es el comportamiento deseado la mayor parte del tiempo (para poder continuar cuando salga de la aplicación temporalmente), tiene que haber una manera de poder elegir, es decir, suspenderlo o salir.
Dado que configurar UIApplicationExitsOnSuspend = YES da solo una forma (es decir, siempre termina cuando se presiona HOME), esta no es una solución que estoy buscando.
Quiero que la aplicación sepa una vez que se complete toda la cadena de pasos, en contra de que solo se haya suspendido la secuencia, y que se cierre en el momento correcto.
Para hacer esto, tengo que ser capaz de terminar la aplicación y escribir el estado una vez que el uso haya completado toda la secuencia. Otras veces, solo quiero que se suspenda la aplicación.
Si toca el botón INICIO dos veces, puede ver las aplicaciones suspendidas. Puedo eliminar (cerrar) mi aplicación al tocarla durante más tiempo y tocar el símbolo (-) que aparece, pero esto no es tan intuitivo para los usuarios y demasiados pasos.
Otra opción es tener un botón Salir como una de las pestañas de navegación en mi aplicación, pero eso es feo. Por ahora, mi única opción parece ser optar por configurar UIApplicationExitsOnSuspend = YES.
Tenga en cuenta que al hacer clic en el botón de inicio solo se suspenden las aplicaciones compiladas con SDK 4.0. Aplicaciones compiladas con SDK anteriores (y aplicaciones 4.0 que [cancelan]] (http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/CoreApplication/CoreApplication.html#//apple_ref/doc/uid/TP40007072-CH3-SW24)) no suspender, terminan. – progrmr
Aquí hay un buen artículo sobre los cambios que Apple hizo y dónde cambiar sus métodos: http://www.drobnik.com/touch/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/ – JoePasq