Quindi, domanda piuttosto semplice. Ignorando le implicazioni dell'eccessivo utilizzo del modello singleton. Sto cercando di trovare un singlet patter affidabile in Objective-C. Mi sono imbattuto in questo:Static Class 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
Questo Sono abbastanza felice con ma conduce a un sacco di questo:
[[SomeSingleTonClass getInstance] someMethodOnTheInstance];
La mia domanda è: perché è meglio di una classe puramente statica.
@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");
}
Tutto ciò che si ottiene davvero, è un metodo leggermente più pulito in cerca di chiamate di metodo. In sostanza si scambia questo:
[[SomeSingleTonClass getInstance] someMethodOnTheInstance];
Per questo
[SomeStaticClass someStaticMethod];
Questa è una semplificazione minore di sicuro, e si può sempre memorizzare l'istanza all'interno della classe. Questa è più curiosità intellettuale, quale dio Objective-C sto facendo incazzare usando classi statiche invece di singleton? Sono sicuro di non poter essere il primo a pensarlo, ma lo prometto, ho fatto prima una ricerca doppia. Le poche risposte che ho trovato mi sembravano basate su versioni precedenti del cacao, perché anche i modelli singleton discussi sembravano soffrire di problemi di threading.
Penso che tu abbia ragione, ma quella domanda è un po 'contorta (anche se la risposta è solida!). Lascerò perdere il mio, ma date le risposte in quel thread, non ho bisogno di aspettare i rialzi sulla risposta di Drummer. È corretto. Grazie! – ChrisCM
Cos'è una classe statica? – Monolo
Una classe statica (probabilmente esiste un nome migliore) è una classe che si basa su metodi di classe e variabili di classe statiche, anziché su un oggetto istanziato e metodi di istanza. Questo è ciò che lo rende un comodo singleton. In particolare se si codifica il metodo init per generare un'eccezione! – ChrisCM