Wątpliwości dotyczące współbieżności z obiektami, które mogą być używane wielokrotnie, jak formatyzatory
Może głupie pytanie, ale potrzebuję pewnych potwierdzeń.
Zazwyczaj, gdy mam do czynienia z obiektami, które mogą być używane wielokrotnie w mojej aplikacji, używam podejścia podobnego do następującego.
Utwórz rozszerzenie, na przykładNSDecimalNumber+Extension
lub narzędzie klasy, w którym formater liczbowy jest tworzony w następujący sposób.
+ (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;
}
Takie podejście jest całkiem dobre, ponieważ na przykład formatery są drogie w tworzeniu. Ale można to również zastosować do innych sytuacji.
Moje pytania są następujące.
Czy to podejście jest również ważne w sytuacjach, w których zaangażowana jest inna ścieżka wykonania (różne wątki)?
Więc jeśli zadzwonię pierwszystringRepresentationOfDecimalNumber
w głównym wątku, a następnie w innym wątku, co może się stać?
Myślę, że ważne jest wykonywanie różnych połączeństringRepresentationOfDecimalNumber
w różnych wątkach, ponieważ wspólny formater, w tym przypadku, czyta tylko, ale chciałbym uzyskać odpowiedź od ekspertów.
Z góry dziękuję.