Qual è il motivo esatto per utilizzare dispatch_once nell'accessorio di istanza condiviso di un singleton in ARC?
+ (MyClass *)sharedInstance
{
// Static local predicate must be initialized to 0
static MyClass *sharedInstance = nil;
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyClass alloc] init];
// Do any other initialisation stuff here
});
return sharedInstance;
}
Non è una cattiva idea istanziare il singleton in modo asincrono in background? Voglio dire cosa succede se richiedo quell'istanza condivisa e mi affido immediatamente a essa, ma dispatch_once impiega fino a Natale per creare il mio oggetto? Non ritorna immediatamente giusto? Almeno questo sembra essere il punto centrale di Grand Central Dispatch.
Allora perché lo stanno facendo?
Note: static and global variables default to zero.