Qual é o motivo exato do uso de dispatch_once no acessador de instância compartilhada de um singleton no 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;
}
Não é uma má idéia instanciar o singleton de forma assíncrona em segundo plano? Quero dizer, o que acontece se eu solicitar essa instância compartilhada e confiar nela imediatamente, mas o dispatch_once leva até o Natal para criar meu objeto? Não retorna imediatamente, certo? Pelo menos, esse parece ser o objetivo principal do Grand Central Dispatch.
Então, por que eles estão fazendo isso?
Note: static and global variables default to zero.