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;
     }
}

或者我是否需要始终检查图层可见性是否已更改然后调用隐藏?



- (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;
     }
}

第一个模式允许关闭条件语句,这会导致更好的编码实践,但确实会导致额外的堆栈调用,而第二个模式更明确,但会导致条件语句失败。

谢谢,布莱恩

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;
     }
}

这是你的二传手。现在,如果操作系统看到图层被隐藏并且不需要重绘,它甚至可能不会调用 drawRect。

于 2009-10-01T08:15:18.500 回答
0

Quartz 可能会优化hidden = YES隐藏层的设置,但如果你真的想找出答案,你应该进行基准测试。

于 2009-09-30T18:57:48.923 回答