2012-04-11 6 views
0

私はマルチスレッドについてios sdkのいくつかのものを読みましたが、まだ問題の答えが見つかりませんでした: メインスレッドでは、プログラムはスレッド内のいくつかのことを行いますプロパティの値が変更された場合、他のスレッドは変更された値を必要とします。 プロパティやフィールドの値を1つのスレッドで変更して、すべてのスレッドで変更できるようにするにはどうすればよいですか?プロパティ/フィールドスレッドの同期

答えて

3

単一のオブジェクトのプロパティを変更すると、基本的に「すべてのスレッド」の値が変更されます。オブジェクトを自分で作成しない限り、スレッド固有のコピーはありません。

マルチスレッドプログラムでは、2つのスレッドが同じメモリ(あなたの場合はプロパティ)に同時にアクセス/書き込みしようとしていないことを確認することが大きな課題です。問題のあなたのプロパティでこれを行う最も簡単な方法(しかし、必ずしも最も効率的ではない、または馬鹿な方法)は、プロパティ宣言から "非原子的"属性を除外することです。 (EDIT:これは、カスタムオーバーライドゲッターやセッターを持っていたり@dynamicをあなたのプロパティを実装するために@synthesizeを使用して、していないと仮定し)

マルチスレッドは、大きなトピックのビットがここにカバーするものであるが、Appleのドキュメントがありますより多くの情報を開始するには良い場所:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html

+0

ロックが最も簡単な方法はありませんか? – CodaFi

+1

プロパティ宣言で "非原子"を指定しないと、コンパイラはバックグラウンドでロックコードを挿入します。これはあなたが '@合成 'していると仮定しています。これを明確にするために編集された答え。 – MechEthan

+0

そうですが、私はプロパティ宣言に "非原子的"属性を含めませんでした。しかし、値は1つのスレッドでのみ変更できますが、主なものや必要なものでは変更されません。 – Alexander