在我的UITableViewCell子类中,我有以下代码:
-(void)updateConstraints
{
static dispatch_once_t once;
dispatch_once(&once, ^ {
// Set constraints here
});
[super updateConstraints];
}
仅为自定义单元类的第一个实例设置约束。我真的不明白静态令牌发生了什么。我的印象是它是一个特定于实例的变量,但显然它是类范围的。谁能解释一下呢?
答案 0 :(得分:1)
变量once
既不是实例变量,也不是静态类变量。
它是一个静态变量,其范围是updateConstraints
方法的本地范围。它仅在该方法中可见,在第一次调用updateConstraints
时创建,并且具有延伸到程序末尾的生命周期。换句话说,once
在调用updateConstraints
之间保持其值。
dispatch_once
函数使用此事实来确保块只运行一次。