2011-08-18 4 views

答えて

4

通常のUIViewControllerコードを記述している場合は、iOSのスレッドセーフについて心配する必要はありません。 iOSでは、メインスレッドでUIに関するメッセージが実行されているはずです。

自分でバックグラウンドでメッセージを実行しない場合は、通常はスレッドを心配する必要はありません。ほとんどの場合、スレッドは常にメインスレッドになります。

P.S. Game Kitのようなフレームワークの中には、バックグラウンドでメッセージを実行するものもありますが、それはUIに関するものではなく、メッセージがメインスレッドで実行されているかどうかをAppleが確認するよう警告します。

+0

マルチコアCPUで実行されている場合、CATiledLayerなどの一部の描画コードがマルチスレッドです。 –

9

concurrency programming guideが良好です。ここに留意すべきいくつかの非常に重要なことがあります。

- メインスレッドのみからUIを更新する必要があります。これは微妙な方法であなたを得ることができます...

- NSNotificationは、それらが解雇されたスレッドで受信されます。したがって、スレッドを起動してNSNotificationに登録してUIアクションをトリガーする場合は、取得したスレッドを確認する必要があります。メインスレッドにない場合は、NSObjectのperformSelectorOnMainThread:withObject:waitUntilDone:をメインスレッドで使用します。

- 非UIコンテキストに描画を行っている場合は、コアグラフィックスがスレッドセーフになっていると思います。 (私はCATiledLayerがこれによりいくつかの巧妙なことをすると信じています)

- 一般的には、ビューコントローラの場合、メインスレッド上で考えるべきイベントループがあります。別のスレッドで独自のイベントループを作成する前に、2回考えます。

+0

ただ、Core Graphicsはスレッドセーフであり、CATiledLayerはすべて複数のバックグラウンドスレッド(1つのコアCPUを持っている場合はバックグラウンドスレッドは1つ)で描画します。 –

関連する問題