¿Cuál es la razón exacta para usar dispatch_once en el acceso de instancia compartida de un singleton en 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;
}
¿No es una mala idea instanciar el singleton asincrónicamente en segundo plano? Quiero decir, ¿qué sucede si solicito esa instancia compartida y confío en ella de inmediato, pero dispatch_once toma hasta Navidad para crear mi objeto? No vuelve de inmediato, ¿verdad? Al menos ese parece ser el objetivo de Grand Central Dispatch.
Entonces, ¿por qué están haciendo esto?
Note: static and global variables default to zero.