objective-c - NSDecimalNumber、NSDecimalNumberHandler 和线程

标签 objective-c ios

我编写了一个基于财务的应用程序,我需要 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/

相关文章:

iphone - 尝试将 NSUInteger 与枚举一起使用 (<<)

ios - swift - 我很笨,我的 subview 不会服从并正确调整自身大小

ios - 当应用程序恢复时 iPad Native 崩溃

ios - UITableView 在编辑时不显示左侧多选圆圈

iphone - UITapGestureRecognizer 在 UIImageView 中不工作

ios - 将现有的 iOS 应用程序项目拆分为静态库和应用程序皮肤项目

ios - 如何实现像 iBooks 中使用的那样的导航栏?

iphone - 在 iOS 中模拟应用程序升级

javascript - 在非文本元素上的 Web 应用程序中触发 iOS 键盘

iOS 无法识别的选择器发送到 Swift 中的实例