1

atomicObjective-C のand属性に関する多くのトピックを読みましたが、それがスレッド セーフであるため高速であることnonatomicを理解しています。しかし、主な問題は、スレッドとは何か、コードでそれらがどのように表現されているのかをまったく理解していないことです。それらは一種の方法ですか?また、ほとんどのプロパティが であることに気付きました。それはなぜですか? スレッドがプロパティのセッターまたはゲッターに同時にアクセスする可能性があることを確認しましたが、これはどのように可能であり、ランタイムでどのように表現されていますか? また、初心者プログラマーとして、どちらを好むべきですか?atomicnonatomicnonatomicatomicnonatomic

これに関する多くの質問を検索しましたが、実際に私の質問に答えた人はいません。

4

2 に答える 2

0

atomicMartin が指摘しているように、修飾子は (一般に) スレッドセーフを保証しないため、一般的に修飾子に依存しません。重要な観察事項は、Martin が指摘したThreading Programming GuideのSynchronizationセクションで説明されているように、変数への変更を適切に同期する必要があるということです。

したがって、あなたの質問への回答として、おそらく一般的に採用する必要がありますnonatomic(より少し高速です) が、より広範なスレッドセーフ システム設計の一部として、さまざまな同期手法 (シリアル キュー、、、、など)のatomicどれを使用するかを決定しNSLockます。 . 場合によっては、その解決策の一部になる可能性があります ( Threading Programming GuideのSynchronization - Atomic Operationsセクションで、アトミック操作は「単純なデータ型で機能する単純な形式の同期」であると指摘されているため)。単純なデータ型ではなく、オブジェクトを扱うだけでは不十分である可能性があります。NSRecursiveLock@synchronizedatomicatomic

余談ですが、初めてマルチスレッド コードに飛び込む場合は、コンカレンシー プログラミング ガイドを確認することをお勧めします。 NSThread. ディスパッチ キュー (グランド セントラル ディスパッチ) とオペレーション キュー ( NSOperationQueue) のいずれかを使用できます。

いくつかの追加の参照:

このトピックに関する WWDC のビデオは他にもたくさんありますが、これら 2 つのビデオから始めるのがよいでしょう。

于 2013-11-09T20:05:39.297 に答える