7

古いアプリを iOS 6 に変換してから、コンソールに次のメッセージが表示されるようになりました。

WARNING: Slow defaults access for key ClientState took 0.023656 seconds, tolerance is 0.020000

コードを iOS 5 から iOS 6 に更新する以外に、自動レイアウトにも切り替えました。Instruments/Time Profiler を実行しましたrootViewControllerが、appDelegate が問題です。ビュー コントローラーを切り替えるたびに、(ビュー コントローラーをインスタンス化する必要があるか、既に存在するものを再利用する必要があるかに関係なく) 時間の大半を費やします。

window.rootViewController = myViewController;

メソッドが表面的に何をするかは知っていますが、カバーの下で何が起こっているのかわかりません...何が原因で遅くなり、スピードを上げるために何ができますか?

編集:ストーリーボードを自動レイアウトから外そうとしましたが、問題は消えました(もちろん、UI レイアウトは混乱しています)。したがって、明らかな結論は、自動レイアウトに関するものです。私はおそらく 70 弱のビューを画面上にすべて組み合わせており、それらをレイアウトするために必要なさまざまな制約があります。自動レイアウトがそれほど遅いとは信じがたいです (自動レイアウトがオフの場合の約 80 ミリ秒から、自動レイアウトがオンの場合の約 1370 ミリ秒まで)。

4

2 に答える 2

3

画面上に 70 のビューがあるとは、かなりの数に思えます。私の提案は、何らかの方法で簡単にすることです。

  • 同時に 70 個のビューすべてが本当に必要ですか?

  • すべてのビューに自動レイアウトが必要かどうかを確認し、可能な限り削除します

  • 一部のビューをグラフィックに置き換えることはできますか? 影などにビューを使用しましたが、画像だった可能性があります

ストーリーボードをいくつかの小さなもの (ログイン、詳細、編集モードなど) に分割できますか? 遅さの一部は、(あまりにも) 大きなストーリーボードを処理しなければならないシステムに起因する可能性があります。

于 2013-01-14T11:33:06.747 に答える
0

2つのViewControllerを使用して新しいプロジェクトを作成し、スイッチング速度をテストすることを検討してください。すべてのiOSアプリには、ウィンドウ、ルートView Controller、およびViewControllerがあります。問題は、あなたが望んでいるほど狭く明確ではない可能性があります。各ViewControllerは何をロードしますか?基礎となるコードを調べましたか?アプリデリゲートは、ルートビューコントローラの初期化または変更に対して何かを行いますか?

于 2013-01-13T03:44:24.120 に答える