Also, ziemlich einfache Frage. Ignorieren der Auswirkungen der Übernutzung des Singleton-Musters. Ich versuche ein zuverlässiges Singleton-Muster in Objective-C zu finden. Ich habe über diese kommen:Statische Klasse vs Singleton
@implementation SomeSingleTonClass
static SomeSingleTonClass* singleInstance;
+ (SomeSingleTonClass*)getInstance
{
static dispatch_once_t dispatchOnceToken;
dispatch_once(&dispatchOnceToken, ^{
singleInstance = [[SomeSingleTonClass alloc] init];
});
return singleInstance;
}
- (void)someMethodOnTheInstance
{
NSLog(@"DO SOMET WORK")
}
@end
Diesen Ich bin ziemlich zufrieden mit, aber es führt zu einer Menge davon:
[[SomeSingleTonClass getInstance] someMethodOnTheInstance];
Meine Frage ist, warum dies ist besser als eine rein statische Klasse.
@implementation SomeStaticClass
static NSString* someStaticStateVariable;
- (id)init
{
//Don't allow init to initialize any memory state
//Perhaps throw an exception to let some other programmer know
//not to do this
return nil;
}
+ (void)someStaticMethod
{
NSLog(@"Do Some Work");
}
Alles, was Sie wirklich gewinnen, ist mild sauberer suchen Methode Anrufe. Im Grunde tauschen Sie aus dieser:
[[SomeSingleTonClass getInstance] someMethodOnTheInstance];
Zu diesem
[SomeStaticClass someStaticMethod];
Dies ist eine geringfügige Vereinfachung sicher, und man kann immer speichern Sie die Instanz in Ihrer Klasse. Das ist mehr intellektuelle Neugierde, was für ein Ziel-C-Gott pinkel ich mit statischen Klassen anstelle von Singletons? Ich bin mir sicher, dass ich nicht die erste Person sein kann, die das denkt, aber ich verspreche, ich habe zuerst eine Duplikatsuche gemacht. Die wenigen Antworten, die ich fand, schienen mir auf älteren Versionen von Kakao zu beruhen, weil selbst die besprochenen Singleton-Muster von Threading-Problemen zu leiden schienen.
Ich denke, du hast Recht, aber diese Frage ist ein wenig verworren (obwohl die Antwort solide ist!). Ich werde meine verlassen, aber angesichts der Antworten in diesem Thread muss ich nicht auf Upvotes von Drummers Antwort warten. Es ist richtig. Vielen Dank! – ChrisCM
Was ist eine statische Klasse? – Monolo
Eine statische Klasse (es gibt wahrscheinlich einen besseren Namen) ist eine Klasse, die auf Klassenmethoden und statischen Klassenvariablen beruht, anstatt auf instanziierten Objekt- und Instanzmethoden. Dies macht es zu einem bequemen Singleton. Vor allem, wenn Sie Ihre Init-Methode codieren, um eine Ausnahme auszulösen! – ChrisCM