Was ist der genaue Grund für die Verwendung von dispatch_once im gemeinsam genutzten Instanz-Accessor eines Singletons unter 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;
}
Ist es nicht eine schlechte Idee, den Singleton asynchron im Hintergrund zu instanziieren? Ich meine, was passiert, wenn ich diese gemeinsam genutzte Instanz anfordere und mich sofort darauf verlasse, aber dispatch_once bis Weihnachten braucht, um mein Objekt zu erstellen? Es kehrt nicht sofort zurück, oder? Zumindest scheint das der springende Punkt bei Grand Central Dispatch zu sein.
Warum machen sie das?
Note: static and global variables default to zero.