关于C#:为什么对类的第一个实例只调用一次dispatch_?

Why does dispatch_once only get called for the first instance of class?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
-(void)updateConstraints
{  
    static dispatch_once_t once;
    dispatch_once(&once, ^ {
    // Set constraints here
    });

    [super updateConstraints];
}

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


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

它是一个静态变量,作用域是updateConstraints方法的局部作用域。它只在该方法中可见,在第一次调用updateConstraints时创建,并且具有贯穿程序末尾的生存期。换句话说,once在调用updateConstraints之间保持其值。

dispatch_once函数使用这个事实来确保块恰好运行一次。