頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


applicationWillTerminate: が呼ばれない理由

バカバカしいところで躓いてました。
あるテスト中のアプリで、どういうわけか applicationWillTerminate: が呼び出されないのでその原因を必死にさがしていたのです。
この前までは確実に呼び出せていたのです。
というのも、この applicationWillTerminate: 内で保存処理をやっているので、ここが呼び出されないとすぐに「ありゃ?おかしいぞ?」とわかるわけです。

applicationWillTerminate: が呼び出されないということは、きっと他のオブジェクトを破棄する時点でとぼけたコードを書いているために、落ちているんだろうといろいろとチェックしたり、、、
ごくシンプルなコードで動作チェックしたり、、、
以前、動いていたはずのコードでチェックしたり、、、

ようやくたどり着いた結論は、これがiOS4のマルチタスクというもの、です。

ほれ、この前我が iPhone3GSに入れたiOS4。
マルチタスクができるようになりましたよね(正直それほど恩恵を感じなかったりしますが)。

私はてっきり、ホームボタンを押すと今まで通りアプリは終了して、ホームボタンを2度押ししてコントロールするとバックグランドで動いたりするのかな、って思っていました。
ところが、どうやら違ったようです。

ホームボタンを押してアプリを終了してもアプリは完全に終わってるわけじゃなくて、サスペンド状態になってるらしい。
ホームボタンの2度押しとか関係なく、再度アプリを起動(普通はアイコンにタッチだよね)すると、最初からアプリが起動するんじゃなくて、サスペンド状態から復活するみたい。

自分の書いたコードのあっちこっちにNSLogでどのメソッドが呼ばれているのかを確認したところ、
ホームボタンを押しても applicationWillTerminate: は呼ばれない。
代わりに applicationDidEnterBackground: が呼ばれる。
サスペンド状態から復活する時には、applicationWillEnterForeground: が呼び出される。

そういうことか~!
なお、実機ではなく、あくまでiPhoneシミュレーター上での結果です。


<< UISegmentedControlで位置、サイズを設定する方法  TopPage  #pragma markなんてあるんだな >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/400-ff88a291




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad