1

drawRect:パフォーマンスの問題について不満を言う人がたくさんいることに気づいたので、パフォーマンスについて簡単に質問します。

私のアプリでは、いくつかの下にあるビューの上に最大150の正方形を描画する必要があります。明らかに、これほど多くの通話でユーザーに目立った違いはありませんが、今後の長所と短所について疑問に思っています。現在、私は2つの方法について議論しています。

drawRect:1)描画を容易にするために、カスタムを使用して透明なUIViewサブクラスを上に追加します

2)通常の正方形のサブビューを追加するだけです

私が言ったように、CADisplayLinkを使用してもユーザーに違いはありませんが、何がより効率的であるかを知りたいだけです。(2)はそれを行うための一種のばかげた方法であり、見た目だけのために役に立たない機能を持つインスタンスを追加しますが、これらの投稿はすべて、私がを使用するのを怖がらせていdrawRectます。本当にdrawRect非効率ですか?

ありがとう

4

1 に答える 1

3

おそらく直感的でdrawRect:はありませんが、すべてのフレームで呼び出されるわけではありません。実際、ビューで特別なことを何もせず、ビュー自体が変更されない場合、ビューは1回呼び出されます。

を呼び出すことで強制的に呼び出すことができますが[myView setNeedsDisplay]、通常はそうする理由はありません。

サブビューが重複しているビューがある場合でも、スーパービューを含むこれらのビューごとに、drawRect:1回だけ呼び出されます。次に、GPUが合成(ブレンド)を行います。

UIKitがすでにやりたいことを提供している場合、カスタムdrawRect:はほとんどの場合、意図したとおりにUIKitを使用するよりも遅く(そして難しく)なります。

また、ソフトウェア開発における最大の罠の1つである時期尚早の最適化に陥らないでください。最もナイーブなバージョンをコーディングし、ベンチマークします。十分に高速であれば、十分に優れており、エネルギーを他の場所に集中させることができます。何かが実際に遅いこと、そしてそれがどこでなぜであるかを知っから、最適化を開始してください。

于 2012-06-28T14:03:54.640 に答える