ios5 app启动过程中执行到过程分析

有时间再来翻译下面到文章


http://d.hatena.ne.jp/glass-_-onion/20100630/1277909762


マルチタスキング対応後のアプリのイベントフローをまとめてみたAdd Starkkos (green)iRSS (green)tokorom18hatyone

iOS 5の登場でこの記事の内容は古くなりました。最新の情報は以下の記事をご覧ください。

iOS4で導入されたマルチタスキングですが便利な反面イベントの発生順序が大幅に変更され複雑化しました。イベントの発生順序をきちんと把握しておかないと思わぬところでメモリを食ったりバッテリに負担をかけてしまうのでまとめてみました。

下図で色の変わっているメソッドiOS4で追加されたメソッドです。

UIApplicationDelegate,UIViewController,applicationWillEnterForeground,applicationDidBecomeActive,applicationWillResignActive,applicationDidEnterBackground

2010/7/1:図を修正

deallocメソッドを削除しました。アプリ終了時UIApplicationDelegateのdeallocメソッドは呼び出されません。システム側でリークも含めてメモリ領域を解放してくれます。paellaさんご指摘ありがとうございました。

applicationWillResignActive,applicationDidBecomeActiveメソッドはOS2.0で追加されたメソッドだったので色を修正しました。aritomさんご指摘ありがとうございました。

図の補足

主なメソッドの説明です。

ポイントはアプリバックグラウンド実行になるタイミング(applicationDidEnterBackground)でUIViewControllerのviewWillDisappearやviewDidDisappearメソッドが呼ばれないのと、アプリの前面復帰時(applicationWillEnterForeground)にUIViewControllerのviewWillAppearやviewDidAppearメソッドが呼ばれないことです。viewWillDisappearメソッド等でデータの保存なんかをしている場合はタイミングを見直した方が良さそうです。

メモリ警告メソッドの呼び出しタイミング

バックグラウンド実行中に別の前面実行アプリでメモリ警告(Received memory warning. Level=1)が発生した場合、次回アプリ起動時にUIApplicationDelegate#applicationDidReceiveMemoryWarningメソッドが呼ばれます。メモリ警告レベル1が1度出たぐらいではバックグラウンドアプリが即座に殺されることはないようです。さすがにメモリ警告レベル2を3回ぐらい出してみたら速攻で殺されました。

アプリ起動時にapplicationDidReceiveMemoryWarningメソッドが呼ばれる流れは以下のようになります。

メモリ警告時の流れ

図の補足

マルチタスキング(図中ではMTと略)対応アプリと非対応アプリの場合で少し流れが変わります。非対応アプリでメモリ警告が起こってもアプリ終了時に全てのメモリが解放されるのでよっぽどのことがない限りバックグラウンドで動いているアプリに影響を与えることはありません。一方マルチタスキング対応のアプリの場合、メモリ警告後ホームボタンを押してもメモリ領域が解放されるわけではないので他のアプリに影響を与える確率が高くなります。メモリ警告時の処理を怠ると他のアプリに迷惑をかける確率が高くなるので注意が必要です。

関連記事

iOS 5でイベントメソッドの呼び出し順が変更されました。詳しくは以下の記事を参照性ください。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值