Zweifel an der Gleichzeitigkeit mit Objekten, die wie Formatierer mehrfach verwendet werden können
Vielleicht eine blöde Frage, aber ich brauche einige Bestätigungen.
Wenn ich mich mit Objekten befasse, die in meiner Anwendung mehrfach verwendet werden können, gehe ich normalerweise folgendermaßen vor.
Erstellen Sie beispielsweise eine ErweiterungNSDecimalNumber+Extension
oder ein Klassendienstprogramm, bei dem ein Zahlenformatierer wie folgt erstellt wird.
+ (NSNumberFormatter*)internal_sharedNumberFormatter
{
static NSNumberFormatter* _internal_numberFormatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_internal_numberFormatter = [[NSNumberFormatter alloc] init];
// other configurations here...
});
return _internal_numberFormatter;
}
+ (NSString*)stringRepresentationOfDecimalNumber:(NSDecimalNumber*)numberToFormat
{
NSString *stringRepresentation = [[self class] internal_sharedNumberFormatter] stringFromNumber:numberToFormat];
return stringRepresentation;
}
Dieser Ansatz ist recht gut, da zum Beispiel die Erstellung von Formatierern teuer ist. Es könnte aber auch auf andere Situationen angewendet werden.
Nun, meine Fragen sind folgende.
Gilt dieser Ansatz auch in Situationen, in denen unterschiedliche Ausführungspfade (unterschiedliche Threads) beteiligt sind?
Also, wenn ich zuerst anrufestringRepresentationOfDecimalNumber
Auf dem Haupt-Thread und dann in einem anderen Thread, was könnte passieren?
Ich denke es ist gültig verschiedene Anrufe zu tätigenstringRepresentationOfDecimalNumber
in verschiedenen Threads, da der gemeinsame Formatierer in diesem Fall nur liest, aber ich hätte gerne eine Antwort von Experten.
Danke im Voraus.