Singleton mit Objective-C

Ein Singleton zu erstellen ist keine große Sache, es braucht eine statische Variable die einmal initialisiert wird. Aber genau diese einmalige Initialisierung ist in Umgebungen mit mehreren Threads nicht machbar, weil es keine atomare Anweisung ist. Es kann also sein, das mehrere Threads beim gleichzeitign Zugriff auf das Singleton es mehrfach initialisieren.

Das folgende Beispiel zeigt eine Thread-sichere Variante in Objective-C unter Verwendung von Grand Central Dispatch (GCD):

+ (Singleton *)sharedInstance
{
    static Singleton *sharedInstance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[Singleton alloc] init];
    });
    return sharedInstance;
}

Zurück