¿Cuál es el motivo exacto para usar dispatch_once en el acceso de instancia compartido de un singleton en ARC?¿Por qué Apple recomienda utilizar dispatch_once para implementar el patrón 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 crear una instancia del singleton de forma asíncrona en el fondo? Me refiero a qué sucede si solicito esa instancia compartida y confío en ella inmediatamente, pero el dispatch_once tarda hasta Navidad para crear mi objeto. No regresa inmediatamente ¿verdad? Al menos ese parece ser el objetivo de Grand Central Dispatch.
¿Por qué están haciendo esto?
'Nota: las variables estáticas y globales son predeterminadas a cero. – ikkentim