2011-01-10 4 views
5

Mi aplicación crea algunos archivos temporales que necesito durante todo su ciclo de vida. Necesito deshacerme de esos archivos eventualmente, para que no ocupen espacio en el dispositivo. Pensé que podría eliminarlos cuando la aplicación se cierra, pero como se ha introducido la multitarea, el ciclo de vida no es tan simple como solía ser. Mi pregunta principal es: ¿Cuándo mi aplicación se mueve en segundo plano y es asesinada más tarde, recibe applicationWillTerminate:? ¿O simplemente se borró de la memoria?¿Cómo realizar la limpieza cuando la aplicación se elimina en el fondo?

no puedo hacer la limpieza cuando la aplicación se mueve en el fondo, ya que podría estar en segundo plano en medio de una operación y necesitaría los archivos temporales una vez que entra de nuevo en primer plano. Creo que podría limpiar los archivos al inicio, pero estoy interesado en el comportamiento applicationWillTerminate: de todos modos.

+0

incluso estaba teniendo el mismo problema al crear un juego en iPhone 4. La aplicación no recibía applicationWillTerminate: llama cuando el usuario sale de la aplicación y no pudo guardar el juego posición del usuario Pero en su caso, no creo que tenga que preocuparse por la pérdida de memoria, ya que la memoria se limpiará si ningún puntero apunta a ella y los archivos temporales se eliminarán automáticamente – Robin

+0

Le preocupan los archivos temporales, no la pérdida de memoria. Sin embargo, AFAIK, la carpeta tmp se borra durante la sincronización con iTunes. –

Respuesta

5

No, applicationWillTerminate: no se llama en la multitarea de iOS 4 dispositivos habilitados. Cuando finaliza su aplicación, generalmente significa que el dispositivo se está quedando sin memoria, por lo tanto, aunque se llame a , no hay forma de decir que tendrá suficiente memoria disponible para completar la tarea de todos modos.

Apple recomienda que limpie cuando su aplicación se quede en segundo plano. Puede solicitar tiempo adicional para hacer esto si necesita unos segundos (este es uno de los pocos escenarios de tareas múltiples abierto a todas las aplicaciones).

Sus otras opciones serían para poner en orden una vez finalizada la tarea (siempre que sea) o cuando se inicia la aplicación. Supongo que puede haber otras permutaciones ...

+0

La limpieza al salir de la aplicación hubiera sido más fácil para mí, pero al no tener otra opción, la limpiaré una vez que finalice la operación. ¡Gracias! – zoul

1

internet dice que applicationWillTerminate: no se llama mientras que la aplicación se mató en el fondo. La otra forma es guardar algo de información (en NSUserDefaults, más o menos), qué archivos temporales se abrieron y, después de la puesta en marcha, comprobar si esos archivos se han dejado y eliminarlos. Además, puede averiguar cómo iOS mata su aplicación (supongo, que esto se hace mediante el envío de señales, sin embargo no estoy seguro) y agregar controlador de señal a su aplicación.

Cuestiones relacionadas