Ich frage mich, wo der beste Ort ist, um Mitglieder der Singleton-Klasse zu initialisieren.Cocoa - Singleton-Objekt: Wo werden Mitgliedsvariablen initialisiert?
Ich benutze Apple grundlegende Anleitung Singleton-Implementierung. Könnten Sie bitte herausfinden, in welcher Zeile die Einträge passieren? Der Code ist der folgende:
static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
sharedGizmoManager = [super allocWithZone:zone];
return sharedGizmoManager; // assignment and return on first allocation
}
}
return nil; //on subsequent allocation attempts return nil
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
- (id)retain
{
return self;
}
- (unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}
- (void)release
{
//do nothing
}
- (id)autorelease
{
return self;
}
Sie möchten vielleicht http://boredzo.org/blog/archives/2009-06-17/doing-it-wrong lesen. Möchten Sie wirklich ein Singleton, das die Freigabe überschreibt? Das maskiert nur Fehler. –
Und bevor Sie Jon Hess daran erinnern, dass Sie den Apple-Dokumenten folgen: Ich schrieb diesen Beitrag speziell als Antwort auf die Apple-Dokumente. –
Bemerkenswert ist auch, dass Klassen keine "Mitglieder" haben. Der nächste, den Sie erhalten können, ist eine statische Variable in der Implementierungsdatei der Klasse. Und Klassenmitglieder sind sowieso nicht das, was Sie initialisieren wollen. Was Sie sagen wollten, sind die * instance * Variablen der singleton * instance *. –