日々の記録。

プログラミングのメモや感じた事などを記録。

iOS アプリがバックグランドに遷移する際の処理方法

について勉強中です。

ドキュメントより学んだ2つの方法と、1つのアイディアを紹介します。

方法1 UIApplicationDelegateのメソッドで処理する

メリット: 一カ所で処理できる。 デメリット: 処理対象のオブジェクトをUIApplicationDelegateが知る必要になり、UIApplicationDelegateがするべき処理以外もしてしまいそう。

  • バックグラウンド状態に移行時 UIApplicationDelegate applicationDidEnterBackground:メソッドにデータを保存する処理を実装する。
  • フォアグラウンドへの復帰時 UIApplicationDelegate applicationWillEnterForeground:に復元処理を実装する。

方法2 NSNotificationCenterを利用する

メリット: 処理対象のオブジェクトのみで、処理が実装できる。 デメリット: 各々のオブジェクトでNotificationの登録、削除を行うので、全体としての管理が大変。

NSNotificationCenterの使い方はここから

  • バックグランド時 UIApplicationDidEnterBackgroundNotification
  • 復帰時 UIApplicationWillEnterForegroundNotification

アイディア方法 StateChangeableというプロトコル

クラス図でのイメージはこんな感じ

f:id:hmu29:20131221134027p:plain

StateChangeableというプロトコルで、applicationDidEnterBackground・ applicationWillEnterForegroundのメソッドを定義します。そして、状態遷移を処理したいオブジェクトで、このプロトコルを実装します。アクティブなStateChangeableオブジェクトをUIApplicationDelegateに登録し、実際にUIAppliationDelegateのapplicationDidEnterBackground・ applicationWillEnterForegroundが呼び出された際には、StateChangeableオブジェクトに処理を委譲という方法です。

公式ドキュメント iOS App Programming Guide App States and Multitaskingの整理

Managing App State Changes

アプリの状態の説明と状態遷移が記載されている。