9

私の理解では、iOSはをサポートしていません__thread。明らかに、を使用してこれを行う方法がありますpthread_setspecific。ただし、この機能を実装したテンプレートクラスはすでにありますか?

特に、書くのが簡単なコードではないので、車輪の再発明をしたいと思います。

リンクをいただければ幸いです。

乾杯

4

1 に答える 1

20

財団が提供します-[NSThread threadDictionary]。これを使用して、スレッドローカルのObjective-Cオブジェクトを格納できます。これにはNSValue、動的ストレージのアドレスのラッピングが含まれる場合があります。

Cocoaは、利用可能なシステム所有のスレッドで実行するコードのブロックを送信する、スレッドコードのスレッドブラインド実行に移行していることに注意してください。これは、GrandCentralDispatchと共有で使用されるモデルNSOperationQueueです。スレッドローカルストレージに依存するコードは、このモデルを最大限に活用しません。詳細については、Appleの同時実行プログラミングガイドを参照してください。

ETA: iOS 5 / OS X 10.7以降、Grand Central Dispatchは、、、、および関数を介してキューローカルストレージと呼ぶことができるものを取得しdispatch_queue_set_specificましdispatch_queue_get_specificdispatch_get_specific。セッターを使用すると、キーに新しい値を設定したとき、またはキューが破棄されたときの値に加えて、デストラクタ関数を提供できます。getter sansキューは、現在のキューをコンテキストとして使用し、キーが現在のキューで定義されていない場合は、現在のキューのターゲットキューでルックアップを繰り返します(プロトタイプのオブジェクト指向システムでのプロパティルックアップの動作と同様)。

于 2011-07-02T16:45:45.273 に答える