Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 992 - Preparing Your App to Run in the Background

Preparing Your App to Run in the Background | Apple Developer Documentation

5つのアプリケーションの状態から5つのトランザクションを経て状態が変化します。Activeなアプリケーションからバックグラウンドに移るときに直接移行できないって以前話しました。

まずdeactivationに入らないといけないので、このときapplicationWillResignActive(_:) が呼ばれて、次の4つのタスクが実行されます。

  • ユーザーデータをディスクに保存してオープンしているファイルはすべて閉じられます。
  • ユーザーのデータを保持する重要なタスクだけこなします。ディスパッチ・キュー、オペレーション・キューも中断して新しい実行タスクは開始されません。
  • アクティブなタイマーは止められます。
  • ゲームプレーも中断します。

これはディアクティベーションのステップで、次はバックグラウンドに移るんですが、applicationDidEnterBackground(_:) が呼ばれます。このメソッドはアプリがバックグラウンドで動き始めているとうシグナルです。次にサスペンド状態に入る前に次のいくつかのステップを踏みます。

  • アプリのユーザーインターフェイスを消去します。表示されている情報を隠して、警告、一時的に表示されているインターフェイスも消し去り、スナップショットを撮るための準備をします。
  • システムと共有しているリソースを解放します。カメラやシステムのデータベースをなど使用しているとシステムは自動的に終了させます。
  • ボンジュール関連のサービスもキャンセルします。
  • 画像、メディアファイル、一時的なオブジェクトもアプリから消去します。NSCacheオブジェクトは自動的に消去されるし、 NSDiscardableContent プロトコールに準拠したオブジェクトも自動的に消去されます。