iPhoneアプリのライフサイクル

SDK2.2で作られたXcodeのプロジェクトを自分のXcode(SDK4.2)で開いた。

1) アプリ起動時に呼ばれるdidFinishLaunching(didFinishLaunchingWithOptions)でデータベースに接続。
2) 処理をいろいろして。
3) アプリ終了時に呼ばれるapplicationWillTerminateでデータベースに保存して、接続を切ってアプリ終了。

という流れのアプリ。

そんでもって自分の環境でリコンパイルしたところ、applicationWillTerminateが呼ばれない。
調べると、iOS4からマルチタスクになったからapplicationWillTerminateじゃなくて、applicationDidEnterBackgroundが呼ばれ、呼び戻す時には、applicationWillEnterForegroundが呼ばれる。
とのこと。

では、現行のSDK2.2でコンパイルされて、リリースされて、iOS4.2で動いてるこのアプリはapplicationWillTerminate呼ばれてるの?呼ばれてなかったら3) の保存処理されてないということですか?

ということで調べてみたところ、以下の条件下ではapplicationWillTerminateが呼ばれるとのことでした。

■ アプリケーションがiPhone SDK 3.x以前にリンクしている。
■ アプリケーションがiPhone OS 3.x以前のデバイス上にデプロイメントされている。
■ 現在のデバイスがマルチタスクをサポートしていない(「マルチタスクがサポートされている かどうかの確認」 (65 ページ)参照)。
■ アプリケーションのInfo.plistファイルにUIApplicationExitsOnSuspendキーが含まれてい る(「バックグラウンド実行を行わないことを選択」 (40 ページ)参照)。

ちょっとびびった。

ちなみにSDK2.2の入れ方がわからないので、デバッグできまへんでした。

iPhoneアプリケーションプログラミング ガイト:
http://developer.apple.com/jp/devcenter/ios/library/japanese.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です