也许要问一个愚蠢的问题,但我需要对此进行一些确认。
通常,当我处理可以在我的应用程序中多次使用的对象时,我使用如下方法。
创建一个扩展,例如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
在不同的线程中执行不同的调用是有效的,因为在这种情况下,共享格式化程序是只读的,但我希望得到专家的答复。
提前致谢。