任何人都可以帮助我理解这段代码吗?

时间:2013-04-15 13:13:36

标签: objective-c

查看代码块,它是一个类方法。任何人都可以给我一些这种方法的解释吗?它做了什么?

+ (PeriodicElements *)sharedPeriodicElements {
  @synchronized(self) {
    static dispatch_once_t pred;
    dispatch_once(&pred, ^{ sharedPeriodicElementsInstance = [[self alloc] init]; });
  }
  return sharedPeriodicElementsInstance;
}

1 个答案:

答案 0 :(得分:3)

它用于创建单身人士。 dispatch_once无论您拨打sharedPeriodicElements多少次,都会确保初始化程序只会在您应用的整个生命周期内被调用一次。

synchronized块有点过头,因为dispatch_once已经是线程安全的。看起来你正在看旧单身人士做旧方式的部分变异版本:

+ (PeriodicElements *)sharedInstance {
    static PeriodicElements *sharedPeriodicElementsInstance;
    @synchronized(self) {
        if (sharedPeriodicElementsInstance == nil) {
            sharedPeriodicElementsInstance = [[PeriodicElements alloc] init];
        }
    }
    return sharedPeriodicElementsInstance;
}

要明确(thx @bbum),这就是你应该运行的:

+(PeriodicElements *)sharedPeriodicElements {
    static dispatch_once_t pred;
    dispatch_once(&pred, ^{ sharedPeriodicElementsInstance = [[self alloc] init]; });
    return sharedPeriodicElementsInstance;
}