Jaki jest dokładny powód użycia dispatch_once we współużytkowanym instancie dla singletona pod 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;
}
Czy nie jest złym pomysłem asynchroniczne tworzenie singletonu w tle? Mam na myśli to, co się stanie, jeśli zażądam udostępnionego wystąpienia i natychmiast na nim polegam, ale dispatch_once trwa do świąt Bożego Narodzenia, aby utworzyć mój obiekt? Nie wraca natychmiast, prawda? Przynajmniej wydaje się, że o to właśnie chodzi w Grand Central Dispatch.
Dlaczego to robią?
Note: static and global variables default to zero.