想知道是否有人可能知道这个问题的答案 - 是否存在与过度隐藏图层相关的成本。
例如,如果一个图层已经被隐藏,那么一遍又一遍地调用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;
}
}
第一个模式允许在条件语句上进行闭包,这会导致更好的编码练习,但会导致额外的堆栈调用,而第二个模式更明确,但会导致条件语句失败。
谢谢, 布赖恩
答案 0 :(得分:1)
为什么不这样做:
- (void)setCharacterLeftFlag:flag {
if ( flag ) {
characterLeftView.layer.hidden = NO;
characterRightView.layer.hidden = YES;
}
else {
characterLeftView.layer.hidden = YES;
characterRightView.layer.hidden = NO;
}
}
这是你的二传手。现在,操作系统甚至可能不会调用drawRect,如果它看到图层被隐藏,并且不需要重新绘制。
答案 1 :(得分:0)
Quartz可能会优化隐藏图层上的设置hidden = YES
,但如果你真的想知道你应该进行基准测试。