2012-02-20 9 views
1

ファイナンスベースのアプリケーションを作成しています。アプリケーション起動時に[NSDecimalNumber setDefaultBehavior:(MyHandlerSubclass)]と呼ぶため、NSDecimalNumberオペレーションのカスタム動作が必要です。しかし、NSDecimalNumberヘッダーファイルから、各スレッドでと呼び出す必要があることが分かりました。 10進数の計算が実行されている可能性があります。NSDecimalNumber、NSDecimalNumberHandler、およびスレッド

明示的に[(NSDecimalNumber *) performOperation:withBehavior:]を呼び出し、毎回MyHandlerSubclassを渡すことができましたが、冗長で疲れています。冗長性を排除し、setDefaultBehavior:を維持するための方法はありますか?間違った動作で異なるスレッドで計算が行われることについて心配する必要はありませんか?そうするために私自身のラッパーを書く必要があるように思えます。

+0

アプリケーションでスレッドを頻繁に使用していますか?一般的には、メインスレッド、および多分1〜2ワーカースレッドが必要ですが、それ以上は必要ありません。あなたのスレッドを正しく実装すれば、あなたのコードは面倒なものにならないはずです。スレッドの代わりに 'NSRunLoop'、' NSOperationQueue'と 'GCD'をチェックしたいかもしれません。 –

+0

リチャード:これはスレッドをうまく使用する方法に関する質問ではありません。私はそれらのすべてについて知っています。私は広範囲にGCDキューを使用しています。あなたが知っているように、実行中のスレッドが保証されていません。 – refulgentis

+1

同じことがキューに適用されます。 (a)は、グローバル並行キュー内の数十または数百のブロックをスケジューリングするべきではなく、(b)アプリケーション内にいくつかの他のキューを持つべきではありません。 – bbum

答えて

2

私は金融・ベースのアプリケーションを作成し、私は NSDecimalNumber操作用のカスタム動作を必要とするので、私は[NSDecimalNumber setDefaultBehavior:(MyHandlerSubclass)]を呼び出すアプリケーションの起動に。 しかし、私はちょうどNSDecimalNumberヘッダーファイルから が各スレッドの10進数計算で呼び出される必要があることを発見しました。 が実行されている可能性があります。

これは、キューのコンテキストでは扱いにくいようです。与えられたGCDキューがどのスレッドで実行されるかは、あなたが作成したものか、システムが提供したキューのどれかであることは保証されません。 (明らかに、メインキューはこのルールの例外です)。

この制限については、ドキュメントには何も記載されていません。ドキュメントが間違っているか、ヘッダーが間違っています...

...それはドキュメントです(逆アセンブルは私の友達です)。バグを報告してください。

+ setDefaultBehaviorを呼び出すために、より詳細なフォームsaveを使用しないようにする方法はありません。任意のスレッドの問題をカバーするために、スケジュールされたブロックの先頭にあります。

現在の動作がキューベースの世界では意味をなさないので、バグを修正するように依頼してください(バグ番号をここに入れてください)。

+0

完了、10898798(私はあなたの応答を読む前にそれを提出したので、私は何かが欠落していたかどうかまだ分かっていないので、言語は少し荒いですが、問題を確認してくれてありがとう、私はこれが私の技術、ヘッダーファイルが間違っている、またはドキュメントが間違っているかどうかわからないので、私はこのような奇妙な問題にぶつかったときは、 – refulgentis

関連する問題