Forse una domanda stupida da chiedere, ma ho bisogno di alcune conferme su di esso.Dubbi sulla concorrenza con oggetti che possono essere utilizzati più volte come i formattatori
Di solito, quando mi occupo di oggetti che possono essere utilizzati più volte all'interno della mia applicazione, utilizzo un approccio simile al seguente.
Creare un'estensione, ad esempio NSDecimalNumber+Extension
o un'utilità di classe in cui un formattatore di numeri viene creato come segue.
+ (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;
}
Questo approccio è abbastanza buono poiché, ad esempio, i formattori sono costosi da creare. Ma potrebbe essere applicato anche ad altre situazioni.
Ora, le mie domande sono le seguenti.
Questo approccio è valido anche in situazioni in cui sono coinvolti diversi percorsi di esecuzione (thread diversi)?
Quindi, se chiamo prima stringRepresentationOfDecimalNumber
sul thread principale e poi in un thread diverso, cosa potrebbe accadere?
Penso sia valido per eseguire chiamate diverse a stringRepresentationOfDecimalNumber
in thread diversi poiché il formattatore condiviso, in questo caso, sta solo leggendo, ma mi piacerebbe avere una risposta dagli esperti.
Grazie in anticipo.
possibile duplicato di [Pensieri in accesso agli oggetti di sola lettura da diversi thread] (http://stackoverflow.com/questions/19960287/thoughts-in-accessing-read-only-objects-from-different-threads) –