我编写了一个基于财务的应用程序,我需要 NSDecimalNumber 操作的自定义行为,因此我在应用程序启动时调用了 [NSDecimalNumber setDefaultBehavior:(MyHandlerSubclass)]
。但是,我刚刚从 NSDecimalNumber 头文件中发现它需要在每个线程上调用, 可能会运行十进制数计算。
我可以显式调用 [(NSDecimalNumber *) performOperation:withBehavior:]
,每次都传递我的 MyHandlerSubclass,但它变得冗长和累人。有什么方法可以消除冗长,维护 setDefaultBehavior:,并且不必担心在不同线程上进行错误行为的计算吗?听起来我必须编写自己的包装器才能这样做。
最佳答案
I write a finance-based application, and I need custom behavior for NSDecimalNumber operations, so I call [NSDecimalNumber setDefaultBehavior:(MyHandlerSubclass)] on application launch. However, I just found out from the NSDecimalNumber header file that it needs to be called on each thread decimal number calculations might be run on.
这在队列的上下文中似乎难以管理。无法保证任何给定 GCD 队列可能在哪个线程上运行,无论是您自己创建的线程还是系统提供的队列之一。 (显然,主队列是这个规则的一个异常(exception))。
文档没有说明此限制。要么文档有误,要么标题有误...
...这是文档(反汇编是我的 friend )。提交错误。
除了调用 +setDefaultBehavior: 之外,似乎没有办法避免在任何计划 block 的开头使用更冗长的形式(以解决任意线程问题)。
提交错误请求增强,因为当前行为在基于队列的世界中没有意义(请将错误# 放在这里)。
关于objective-c - NSDecimalNumber、NSDecimalNumberHandler 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9369225/