5

私のアプリケーションは、ライフサイクル全体で必要な一時ファイルをいくつか作成します。これらのファイルは最終的に破棄する必要があるため、デバイスのスペースを占有しません。アプリケーションが終了したときに削除できると思いましたが、マルチタスクが導入されたため、ライフサイクルは以前ほど単純ではありません。私の主な質問は次のとおりです。アプリケーションがバックグラウンドに移動し、後で強制終了された場合、アプリケーションは受信しapplicationWillTerminate:ますか?それとも、メモリから消去されただけですか?

アプリケーションがバックグラウンドに移行したときにクリーンアップを実行できません。これは、操作の途中でバックグラウンドになる可能性があり、フォアグラウンドに戻ったら一時ファイルが必要になるためです。起動時にファイルをクリーンアップできると思いますが、applicationWillTerminate:とにかく動作に興味があります。

4

2 に答える 2

5

いいえ、applicationWillTerminate:マルチタスク対応のiOS4デバイスでは呼び出されません。アプリが終了すると、通常、デバイスのメモリが不足していることを意味します。したがって、呼び出されたとしても、タスクを完了するのに十分なメモリがあるとは言えません。

Appleは、アプリがバックグラウンドになったときにクリーンアップすることをお勧めします。数秒必要な場合は、これを行うために追加の時間を要求できます(これは、すべてのアプリケーションに開かれた数少ないマルチタスクシナリオの1つです)。

他のオプションは、タスクが終了したとき(それがいつでも)またはアプリケーションが開始されたときに片付けることです。私は他の順列があるかもしれないと思います...

于 2011-01-10T09:29:56.180 に答える
1

インターネットによると、アプリケーションがバックグラウンドで強制終了されている間は、applicationWillTerminate:は呼び出されません。もう1つの方法は、開いた一時ファイルなどの情報を(NSUserDefaultsなどで)保存し、起動後にそれらのファイルが残っているかどうかを確認して削除することです。また、iOSがどのようにアプリケーションを強制終了するかを確認し(これはシグナルを送信することで行われると思いますが、よくわかりません)、シグナルハンドラーをアプリに追加します。

于 2011-01-10T09:11:57.627 に答える