通常のビューコントローラコードを記述するとき、これは単一のイベントループスレッドからのみ呼び出されると仮定できますか?どのようなクラスのスレッドセーフな必要がありますか?複数のスレッドが関与する通常の状況は何ですか?iOSアプリケーションのスレッドセーフについて心配する必要はいつですか?
答えて
通常のUIViewControllerコードを記述している場合は、iOSのスレッドセーフについて心配する必要はありません。 iOSでは、メインスレッドでUIに関するメッセージが実行されているはずです。
自分でバックグラウンドでメッセージを実行しない場合は、通常はスレッドを心配する必要はありません。ほとんどの場合、スレッドは常にメインスレッドになります。
P.S. Game Kitのようなフレームワークの中には、バックグラウンドでメッセージを実行するものもありますが、それはUIに関するものではなく、メッセージがメインスレッドで実行されているかどうかをAppleが確認するよう警告します。
Concurrency Programming Guideが役に立ちます。
concurrency programming guideが良好です。ここに留意すべきいくつかの非常に重要なことがあります。
- メインスレッドのみからUIを更新する必要があります。これは微妙な方法であなたを得ることができます...
- NSNotificationは、それらが解雇されたスレッドで受信されます。したがって、スレッドを起動してNSNotificationに登録してUIアクションをトリガーする場合は、取得したスレッドを確認する必要があります。メインスレッドにない場合は、NSObjectのperformSelectorOnMainThread:withObject:waitUntilDone:をメインスレッドで使用します。
- 非UIコンテキストに描画を行っている場合は、コアグラフィックスがスレッドセーフになっていると思います。 (私はCATiledLayerがこれによりいくつかの巧妙なことをすると信じています)
- 一般的には、ビューコントローラの場合、メインスレッド上で考えるべきイベントループがあります。別のスレッドで独自のイベントループを作成する前に、2回考えます。
ただ、Core Graphicsはスレッドセーフであり、CATiledLayerはすべて複数のバックグラウンドスレッド(1つのコアCPUを持っている場合はバックグラウンドスレッドは1つ)で描画します。 –
- 1. アプリケーションのタイムゾーンについて心配する必要はありますか?
- 2. Node.jsのConcurrent Modificationについて心配する必要はありますか?
- 3. このエラーログについて心配する必要がありますか?
- 4. NSUserDefaultsの衝突について心配する必要がありますか?
- 5. ActiveRecordのロックについてはいつ心配する必要がありますか?
- 6. 4sについて心配ですか?
- 7. API 16+では非2のテクスチャについて心配する必要はありますか?
- 8. 私はこれについて心配すべきですか?
- 9. フラッシュのスレッドの安全性について心配する必要はありますか?
- 10. Tomcat Spring Beanとの並行性について心配する必要はありますか?
- 11. Checkstyle:なぜ開発者としてそれについて心配する必要がありますか?
- 12. キューブサイズの出力について心配ですか?
- 13. MySQLデータベースの負荷について心配する必要がありますか?
- 14. なぜCPythonのスレッドセーフティについて心配する必要がありますか?
- 15. ASP.NET MVC 3.コンテナの廃棄について心配する必要がありますか?
- 16. この422(Unprocessable Entity)エラーについて心配する必要がありますか? (Rails&Devise)
- 17. Webサービスから返されたURLの '&'について心配する必要があります
- 18. ウェブサイトの偽アカウント/ログインについて心配する必要がありますか?
- 19. Macのアプリケーション開発でメモリリークが心配する必要はありますか?
- 20. なぜ赤い心臓の絵文字は2つのコードポイントを必要としますが、他の色の心臓は1つ必要ですか?
- 21. Disposeはいつ必要ですか?
- 22. dynamic_castはいつ必要ですか?
- 23. "typename"キーワードはいつ必要ですか?
- 24. ScriptManager/ScriptManagerProxyはいつ必要ですか?
- 25. Queue.join()はいつ必要ですか?
- 26. データクラスはいつ必要ですか?
- 27. プレースホルダはいつ必要ですか?
- 28. LINQ(クエリ言語)のアップグレードパスについて心配する必要があります
- 29. このアプリケーションを実行するには、いくつのVisual C++再配布可能ファイルが必要ですか?
- 30. styled-components:FOUCについて心配しています
マルチコアCPUで実行されている場合、CATiledLayerなどの一部の描画コードがマルチスレッドです。 –