为什么只为第一个类实例调用dispatch_once?

时间:2013-11-16 20:56:49

标签: objective-c static scope

在我的UITableViewCell子类中,我有以下代码:

-(void)updateConstraints
{   
    static dispatch_once_t once;
    dispatch_once(&once, ^ {
    // Set constraints here
    });

    [super updateConstraints];
}

仅为自定义单元类的第一个实例设置约束。我真的不明白静态令牌发生了什么。我的印象是它是一个特定于实例的变量,但显然它是类范围的。谁能解释一下呢?

1 个答案:

答案 0 :(得分:1)

变量once既不是实例变量,也不是静态类变量。

它是一个静态变量,其范围是updateConstraints方法的本地范围。它仅在该方法中可见,在第一次调用updateConstraints时创建,并且具有延伸到程序末尾的生命周期。换句话说,once在调用updateConstraints之间保持其值。

dispatch_once函数使用此事实来确保块只运行一次。

相关问题