iOS アプリは、次の理由により終了する場合があります。
- ウォッチドッグ タイムアウト
おそらくご存じのとおり、iOS 4.x 以降、iOS アプリを終了しても、ほとんどの場合、アプリは終了せず、バックグラウンドに送られます。
However, there are times when the OS will terminate your app and
generate a crash log if the app didn’t respond fast enough. These
events correspond with the implementation of the following
UIApplicationDelegate methods:
- application:didFinishLaunchingWithOptions:
- applicationWillResignActive:
- applicationDidEnterBackground:
- applicationWillEnterForeground:
- applicationDidBecomeActive:
- applicationWillTerminate:
上記のすべての方法で、アプリが処理を完了するまでの時間が限られています。アプリの実行に時間がかかりすぎると、OS がアプリを終了します。
- ユーザーの強制終了
iOS 4.x はマルチタスクをサポートしています。アプリが UI をブロックして応答を停止した場合、ユーザーはホーム画面からホーム ボタンをダブルタップしてアプリを終了できます。
注: ホーム ボタンをダブルタップすると、過去に実行したすべてのアプリケーションのリストも表示されることに気付いたかもしれません。これらのアプリは必ずしも実行されているわけではなく、必ずしも中断されているわけでもありません。
通常、ユーザーがホームボタンを押すと、アプリは約 10 分間バックグラウンドに留まり、その後 OS によって自動的に終了されます。したがって、ホーム ボタンをダブルタップして表示されるアプリのリストは、過去に実行されたアプリのリストにすぎません。
- メモリ不足の終了
UIViewController をサブクラス化するとき、didReceiveMemoryWarning メソッドに気付いたかもしれません。
フォアグラウンドで実行されているアプリは、メモリへのアクセスと使用に関して最も優先度が高くなります。ただし、アプリがデバイスで使用可能なすべてのメモリを取得するわけではありません。各アプリは、使用可能なメモリの一部を取得します。
総メモリ消費量が特定のレベルに達すると、OS は UIApplicationDidReceiveMemoryWarningNotification 通知を送信します。同時に、アプリに対して didReceiveMemoryWarning が呼び出されます。
この時点で、アプリが引き続き適切に実行されるように、OS はバックグラウンドでアプリの終了を開始してメモリを解放します。すべてのバックグラウンド アプリが終了しても、アプリがまだメモリを必要としている場合、OS はアプリを終了します。