2011-01-10 20 views
5

La mia applicazione crea alcuni file temporanei che mi servono durante l'intero ciclo di vita. Ho bisogno di disporre di quei file, quindi non occupano spazio sul dispositivo. Ho pensato di poterli cancellare quando l'applicazione si chiude, ma dal momento che il multitasking è stato introdotto, il ciclo di vita non è così semplice come un tempo. La mia domanda principale è: quando la mia applicazione si sposta in background e viene uccisa in seguito, riceve applicationWillTerminate:? O è semplicemente cancellato dalla memoria?Come eseguire la pulizia quando l'applicazione viene uccisa in background?

Non riesco a eseguire la pulizia quando l'applicazione viene spostata in background, poiché potrebbe essere in background nel mezzo di un'operazione e richiederebbe i file temporanei una volta tornati in primo piano. Penso di poter pulire i file all'avvio, ma sono comunque interessato al comportamento di applicationWillTerminate:.

+0

anche io stavo avendo lo stesso problema durante la creazione di un gioco in iPhone 4. L'applicazione non stava ricevendo applicationWillTerminate: chiamata quando l'utente esce dall'app e non è stato in grado di salvare il posizione dell'utente. Ma nel tuo caso non penso che tu debba preoccuparti della perdita di memoria in quanto la memoria verrà pulita se nessun puntatore lo sta puntando e i file temporanei verranno eliminati automaticamente. – Robin

+0

Si preoccupa dei file temporanei, non della perdita di memoria. Tuttavia, AFAIK, la cartella tmp viene cancellata durante la sincronizzazione con iTunes. –

risposta

5

No, applicationWillTerminate: non viene chiamato su dispositivi iOS 4 abilitati al multitasking. Quando la tua app viene terminata, in genere significa che il dispositivo sta esaurendo la memoria, quindi anche se è chiamato, non è detto che avresti abbastanza memoria disponibile per completare comunque l'operazione.

Apple consiglia di pulire quando l'app viene messa in background. Puoi richiedere più tempo per farlo se hai bisogno di qualche secondo (questo è uno dei pochi scenari multi-tasking aperti a tutte le applicazioni).

Le altre opzioni dovrebbero essere riordinare quando l'attività è terminata (ogni volta che è) o quando l'applicazione viene avviata. Suppongo che potrebbero esserci altre permutazioni ...

+0

La pulizia all'uscita dell'applicazione sarebbe stata più facile per me, ma non avendo altra opzione, pulirò dopo l'operazione. Grazie! – zoul

1

Internet dice che applicationWillTerminate: non viene chiamato mentre l'applicazione viene uccisa in background. L'altro modo è di salvare alcune informazioni (in NSUserDefaults, o giù di lì), quali file temporanei sono stati aperti e dopo l'avvio controllare se quei file sono rimasti ed eliminarli. Inoltre, puoi scoprire come iOS uccide la tua applicazione (presumo che ciò avvenga inviando segnali, ma non ne sono sicuro) e aggiungo il gestore di segnali alla tua app.

Problemi correlati