2011-01-10 14 views
5

私のアプリケーションは、ライフサイクル全体にわたって必要な一時ファイルをいくつか作成します。私は最終的にそれらのファイルを処分する必要があるので、彼らはデバイス上のスペースを取ることはありません。アプリケーション終了時にそれらを削除できると思ったのですが、マルチタスクが導入されて以来、ライフサイクルはそれまでと同じくらい単純ではありません。私の主な質問は、アプリケーションがバックグラウンドに移行し、後で殺されると、applicationWillTerminate:を受け取るのでしょうか?それとも、それは記憶から拭き取られただけですか?アプリケーションがバックグラウンドで強制終了された場合にクリーンアップを実行する方法は?

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

+0

iPhone 4でゲームを作成している間でも、私は同じ問題を抱えていました。アプリケーションはアプリケーションを受信しませんでした:ユーザーがアプリケーションを終了し、ユーザの位置。しかし、あなたの場合、ポインタが指されていないとメモリが消去され、一時ファイルが自動的に削除されるのでメモリリークについて心配する必要はないと思います。 – Robin

+0

メモリリークではなく一時ファイルについて心配しています。ただし、AFAIK、tmpフォルダはiTunesとの同期中に消去されます。 –

答えて

5

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

アップルでは、​​アプリがバックグラウンドに入るときにクリーンアップすることをおすすめします。数秒が必要な場合は、これを行う余分な時間を要求できます(これは、すべてのアプリケーションで利用できる少数のマルチタスクシナリオの1つです)。

他のオプションは、タスクが完了すると(いつでも)、またはアプリケーションが起動されたときに整理することです。私は他の順列があるかもしれないと思います...

+0

アプリケーションの終了時のクリーンアップは簡単でしたが、他のオプションがない場合は、操作が終了した後にクリーンアップします。ありがとう! – zoul

1

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

関連する問題