私は、かなり複雑なストーリーボード ベースの iPad アプリを使用しています。私のワークフローは次のとおりです コレクション ビューは別のビューをプッシュし、別のビューをモーダルに表示します。
モーダルに表示される 3 番目のビューはかなり複雑で、19 のサブビューがあり、そのうちのいくつかはイメージ ビューです。アプリは、viewDidLoad 内のビュー階層を整理するために多くのことを行います。viewWillAppear または viewDidAppear 内には他に何もありません。
私が気になるのは、viewDidLoad 内にロギング ステートメントを配置すると、ユーザーがストーリーボード セグエを開始してから 1.5 秒以内に viewDidLoad が完了することがわかります。次に、viewWillAppear が呼び出されます。その後、画面は 3 秒から 80 秒 (そうです、80 秒です!) の間そこにとどまります。ビューが比較的速く表示される場合もあれば、長い時間がかかる場合もあります。
これは、viewDidLoad のメモリ消費量が多すぎることの症状ですか? 言い換えれば、iOS がビューを表示するのに十分なメモリをクリーンアップするための遅延ですか?
xCode で停止ボタンを押した後、アプリを再起動し、一連の手順を実行して View Controller を表示します。最初の実行は次のとおりです。
/
/80 seconds!
2013-03-27 22:56:30.311 iconmaker[2076:907] -[GLFirstViewController viewWillAppear:] [Line 597] viewWillAppear
2013-03-27 22:57:50.351 iconmaker[2076:907] -[GLFirstViewController viewDidAppear:] [Line 604] viewDidAppear
//after popping the view controller and repeating:
//less than 2 seconds
2013-03-27 22:59:23.698 iconmaker[2076:907] -[GLFirstViewController viewWillAppear:] [Line 597] viewWillAppear
2013-03-27 22:59:24.306 iconmaker[2076:907] -[GLFirstViewController viewDidAppear:] [Line 604] viewDidAppear
更新: デバイスの電源をオフにしてから再起動すると、View Controller は非常に高速に表示され、最初の実行では再び 2 秒未満で表示されます。コントローラーを 4 回押したりポップしたりした後の割り当てのプロファイリングを次に示します。
これはメモリ解放の問題ですか?