0

誰かがこの質問に対する答えを知っているかどうか疑問に思っていました-レイヤーを隠しすぎることに関連するコストはありますか.

たとえば、レイヤーが既に非表示になっている場合、layer.hidden = YES を何度も呼び出すと、単に呼び出しスタックをステップスルーするよりもオーバーヘッドが増えるでしょうか? Cocoa は、レイヤーが既に非表示になっていることを認識できるほどスマートですか?



- (void) drawRect:(CGRect)rect
{
     if ( characterLeftFlag ) {
          characterLeftView.layer.hidden = NO;
          characterRightView.layer.hidden = YES;
     }
     else {
          characterLeftView.layer.hidden = YES;
          characterRightView.layer.hidden = NO;
     }
}

または、レイヤーの可視性が変更されたかどうかを常に確認してから、hidden を呼び出す必要がありますか?



- (void) drawRect:(CGRect)rect
{
     if ( characterLeftFlag && characterLeftView.layer.hidden ) {
          characterLeftView.layer.hidden = NO;
          characterRightView.layer.hidden = YES;
     }
     else if ( characterRightFlag && characterRightView.layer.hidden ) {
          characterLeftView.layer.hidden = YES;
          characterRightView.layer.hidden = NO;
     }
}

最初のパターンでは、条件ステートメントのクロージャーが許可されます。これにより、コーディングの実践が向上しますが、余分なスタック呼び出しが発生します。2 番目のパターンは、より明示的ですが、条件ステートメントが失敗します。

ありがとう、ブライアン

4

2 に答える 2

1

なぜこれをしないのですか:

- (void)setCharacterLeftFlag:flag {
    if ( flag ) {
          characterLeftView.layer.hidden = NO;
          characterRightView.layer.hidden = YES;
     }
     else {
          characterLeftView.layer.hidden = YES;
          characterRightView.layer.hidden = NO;
     }
}

これはあなたのセッターです。現在、レイヤーが非表示であり、再描画する必要がないことがわかった場合、OS は drawRect を呼び出すことさえできません。

于 2009-10-01T08:15:18.500 に答える
0

Quartz はおそらくhidden = YES非表示レイヤーの設定を最適化しますが、本当に知りたい場合はベンチマークする必要があります。

于 2009-09-30T18:57:48.923 に答える