2010-12-13 14 views
0

私はNSDictionaryを含むクラスを持っており、定期的にこのNSDictionaryにデータを書き込むスレッドを持っています。その後、別の時に、クラスのNSDictionaryからデータを読み取る別のView Controllerがあります。スレッドのデータ構造を読み書きするための戦略

このクラスのデータをスレッドセーフにして、 '読み込み'のためにデータを尋ねると正しいバージョン、つまり最後に書かれたバージョンが得られるようにするにはどうすればよいですか? 1つはおそらく現在書かれている?

答えて

1

Carlが述べたように、@synchronizedが1つのオプションです。

iOS 4.0以降をターゲットにする場合は、Grand Central Dispatchキューを使用して、複数のスレッド/キューからの共有データ構造へのアクセスを規制します。 WWDC 2010セッション211ビデオには、この技術の説明があります。

一言で言えば、共有データ構造へのアクセスを規制するのが1つのカスタムGCDキュー(dispatch_queue_create())です。共有構造体にアクセスするすべてのコードは、このキューの内部から行う必要があります。キューは一度に1ブロックのコードしか実行しないため、同時に2つのスレッドがデータ構造にアクセスすることはできません。

+0

"ロック"は読み込み中か "書き込み中"に入れますか?つまり、データが書き出されるときに 'dispatch_async'を使用し、読み取り用に 'dispatch_sync'を使用しますか? –

+0

@Justin:Both。共有データ構造へのすべてのアクセスは、キューを通過する必要があります。 –

0

あなたは@synchronizeを探しています。

+0

@synchronizeは、ジャスティンの質問が意味するトランザクションの保存にはあまり役立ちません。 – bbum

関連する問題