它用于创建单例。dispatch_once
将确保无论您调用多少次sharedPeriodicElements
,初始化程序在您的应用程序的整个生命周期内只会被调用一次。
该synchronized
块有点过头了,因为dispatch_once
它已经是线程安全的。似乎您正在查看旧的单例方式的部分变异版本:
+ (PeriodicElements *)sharedInstance {
static PeriodicElements *sharedPeriodicElementsInstance;
@synchronized(self) {
if (sharedPeriodicElementsInstance == nil) {
sharedPeriodicElementsInstance = [[PeriodicElements alloc] init];
}
}
return sharedPeriodicElementsInstance;
}
要清楚(谢谢@bbum),这确实是您应该运行的:
+(PeriodicElements *)sharedPeriodicElements {
static dispatch_once_t pred;
dispatch_once(&pred, ^{ sharedPeriodicElementsInstance = [[self alloc] init]; });
return sharedPeriodicElementsInstance;
}