Quelle est la raison exacte de l'utilisation de dispatch_once dans l'accesseur d'instance partagée d'un singleton sous 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-ce pas une mauvaise idée d'instancier le singleton de manière asynchrone en arrière-plan? Je veux dire que se passe-t-il si je demande cette instance partagée et que j'y compte immédiatement, mais dispatch_once prend jusqu'à Noël pour créer mon objet? Il ne revient pas immédiatement non? Au moins, cela semble être tout l'intérêt de Grand Central Dispatch.
Alors pourquoi font-ils ça?
Note: static and global variables default to zero.