Используется для создания синглета. 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;
}
кода чтобы сделать его потокобезопасным, и использовать диспетчер_собрания GCD. Поиск этих двух терминов :) –
Спасибо Anoop Vaidya :) – chinabenjamin66
Неверный код, чтобы сделать что-то потокобезопасным, при этом. Хотя это неправильно, оно работает. Но это ставит вопрос о качестве остальной базы кода. – bbum