2

まず、このアプリケーションにはいくつかの設計上の問題があることに気付きました。その大部分を書き直すことでおそらく私の問題は解決するでしょうが、今は物事をより速くする方法を探しています。

基本的に私は持っています

viewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
viewController.view;

ここで、MyViewController.xibは、多くのコントローラーとビューが絡み合ったかなり複雑なnibファイルであり、その一部はもちろん他のnibからビューと階層をロードしますが、すべてではありません。これはロードに約7秒かかります。これは、これがiPhoneアプリケーションであることを考えると、非常に長い時間です。

ビューを強制的にロードする理由は、並列スレッドでいくつかのネットワークリクエストも実行しているためです。それらが完了したら、これらのビューを使用してかなりの数の設定を行います。

私の質問は、ペン先のどの部分に非常に時間がかかっているかをどのように見つけるのか、そしてアプリ全体を完全に書き直さずにこれを最適化するための最良の戦略は何でしょうか?

4

2 に答える 2

3

最初に行うことは、ペン先の読み込みがボトルネックであると想定しないことです。ペン先の読み込みは高度に最適化されており、非常に効率的です。ボトルネックは、ペン先よりもネットワーク要求である可能性が高くなります。Instrumentsを使用して、何かをする前にアプリが時間を費やしている場所に関する具体的なデータを取得します。

それがペン先であると仮定すると、Andiihの回答はプロファイリングに最適ですが、実際に設計上の問題があるように思えます。

大きなペン先を小さなペン先に分割する必要があるようです。

ペン先ごとに1つのビューを持つのが一般的です。たとえば、5つのタブがあるタブバーがあるアプリがあるとします。次に、各タブには、詳細ビューを開くテーブルビューがありました。通常の設定では、11個の個別のペン先があります。1つのペン先がタブバーを定義し、各タブのビューに1つのペン先が定義され、次に詳細ビューごとに1つのペン先が定義されます。アプリが起動すると、タブバーのペン先と最初に表示されるタブのみが読み込まれるため、11個のペン先のうち2つだけを読み込んで開始します。

最適化するために、最初に行うことは、それを可能な限り最小の個々のペン先に分解することです。ペン先は必要な場合にのみロードされます。ビューがすぐに表示されない場合にペン先をロードしないように、ペン先全体に機能を配置する必要があります。

ペン先は単なる軽量のデータファイルであるため、99%同一のペン先を作成することを恐れないでください。たとえば、ポートレートビューとランドスケープビューごとに別々のビューを使用することがよくあります。ユーザーの視点から見ると、これは1つのビューですが、3つの別々のペン先があります。これは、単一の複雑なビューを回転させるよりも、完全に別個のビューを使用する方が簡単な場合に行います。各ペン先は、その向きが使用されるときにロードされます。向きが変わらない場合は、読み込まれません。

ネットワーク要求に応じて大幅に変化する複雑なインターフェイスを使用している場合は、すべての機能を1つのペン先に詰め込むよりも、バリエーションごとに別々のペン先を使用する方が実行時に高速になります。

于 2010-05-18T12:40:24.840 に答える
1

これが実際に機能するかどうかはわかりませんが、各サブxibのロード時に呼び出される各コントローラーのinitWithCoderにロギングステートメントを配置できます。それはあなたにいくつかの手がかりを与えるかもしれません。

楽器はあなたに何も役に立たないと思いますか?

于 2010-05-18T12:13:04.587 に答える