Dúvidas sobre a simultaneidade com objetos que podem ser usados várias vezes, como formatadores
Talvez uma pergunta estúpida para perguntar, mas eu preciso de algumas confirmações sobre isso.
Normalmente, quando lido com objetos que podem ser usados várias vezes em meu aplicativo, uso uma abordagem como a seguinte.
Crie uma extensão, por exemploNSDecimalNumber+Extension
, ou um utilitário de classe onde um formatador numérico é criado como o seguinte.
+ (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;
}
Essa abordagem é bastante boa, pois, por exemplo, é difícil criar formatadores. Mas poderia ser aplicado a outras situações também.
Agora, minhas perguntas são as seguintes.
Essa abordagem também é válida em situações em que diferentes caminhos de execução (segmentos diferentes) estão envolvidos?
Então, se eu ligar primeirostringRepresentationOfDecimalNumber
no thread principal e, em seguida, em um segmento diferente, o que poderia acontecer?
Eu acho que é válido para realizar chamadas diferentes parastringRepresentationOfDecimalNumber
em diferentes threads desde o formatador compartilhado, neste caso, está lendo apenas, mas gostaria de ter uma resposta de especialistas.
Desde já, obrigado.