Сомнения в параллелизме с объектами, которые можно использовать несколько раз, например, в формататорах
Возможно глупый вопрос, чтобы спросить, но я нуждаюсь в некотором подтверждении этого.
Обычно, когда я имею дело с объектами, которые могут использоваться несколько раз в моем приложении, я использую подход, подобный следующему.
Создайте расширение, скажем, напримерNSDecimalNumber+Extension
или утилита класса, в которой создается средство форматирования чисел, как показано ниже.
+ (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;
}
Этот подход довольно хорош, так как, например, форматтеры дороги в создании. Но это может быть применено и к другим ситуациям.
Теперь мои вопросы следующие.
Этот подход также действителен в ситуациях, когда задействованы разные пути выполнения (разные потоки)?
Итак, если я позвоню первымstringRepresentationOfDecimalNumber
в главном потоке, а затем в другом потоке, что может произойти?
Я думаю, что допустимо выполнять разные звонкиstringRepresentationOfDecimalNumber
в разных темах, поскольку общий форматер, в данном случае, только для чтения, но я хотел бы получить ответ от экспертов.
Заранее спасибо.