2
+(NSString*)FromNumber:(NSNumber*)number
{
NSString *key = akey;
NSNumberFormatter *numberFormatter = [[[NSThread currentThread] threadDictionary] objectForKey:key];
if(!numberFormatter)
{
numberFormatter = [self getDecimalNumberFormatterWithDigits:2];
[numberFormatter setFormatterBehavior:NSNumberFormatterPercentStyle];
[numberFormatter setNegativeSuffix:@"%"];
[numberFormatter setPositiveSuffix:@"%"];
[numberFormatter setNilSymbol:@""];
[numberFormatter setLocale:[ISMDateUtilities enUSPosixLocale]];
[[[NSThread currentThread] threadDictionary] setValue:numberFormatter forKey:key];
}
return [numberFormatter stringForObjectValue:number];
}
我很好奇的是使用threadDictionary
来同步一块代码?这段代码是否通过使用threadDictionary来保证线程安全?
谢谢!
真正的问题是*你真的需要每线程号码格式化程序吗?! *看起来很奇怪,想要根据正在运行的线程更改数字的格式?!我最好的猜测是OP可以更好地通过类方法+ dispatch_once()来初始化所述方法中的单例格式化程序。 – bbum
@bbum'NSNumberFormatter'的文档声明该类不是线程安全的。但目前还不清楚这是否意味着单个格式化程序可以同时格式化或解析来自不同线程的多个值。 – rmaddy
啊 - 是的 - 那。我忘了那个。尽管如此,每个线程格式化程序仍然尖叫着“不受控制的并发设计”。我会倾向于一个并发模型la CoreData;严格控制,只有一个或两个(主要+工人)队列可能发生格式化。 – bbum