Die akzeptierte Antwort ist zwar kompilierbar, aber falsch.
+ (MySingleton*)sharedInstance
{
@synchronized(self) <-------- self does not exist at class scope
{
if (sharedInstance == nil)
sharedInstance = [[MySingleton alloc] init];
}
return sharedInstance;
}
Laut Apple-Dokumentation:
... Sie können einen ähnlichen Ansatz wählen, um die Klassenmethoden der assoziierten Klasse zu synchronisieren, indem Sie das Class-Objekt anstelle von self verwenden.
Selbst wenn die Verwendung von "self" funktioniert, sollte das nicht der Fall sein, und das sieht für mich wie ein Fehler beim Kopieren und Einfügen aus. Die korrekte Implementierung für eine Klassenfabrikmethode wäre:
+ (MySingleton*)getInstance
{
@synchronized([MySingleton class])
{
if (sharedInstance == nil)
sharedInstance = [[MySingleton alloc] init];
}
return sharedInstance;
}