Quelle est la raison exacte pour l'utilisation de dispatch_once dans l'instance partagée accesseur d'un singleton en vertu de l'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'est-il pas une mauvaise idée pour instancier le singleton de manière asynchrone dans le fond? Je veux dire qu'advient-il si je demande à ce que l'instance partagée et de compter sur elle immédiatement, mais dispatch_once prend jusqu'à Noël pour créer mon objet? Il ne renvoie pas immédiatement à droite? Au moins, cela semble être le point entier de Grand Central Dispatch.
Alors, pourquoi font-ils cela?