私はこの質問(および他のいくつかの質問)を読みました:
プロパティのアトミック/非アトミック指定子がどのように機能するかを完全に理解しています(少なくともそう願っています:-D)。
Atomicは、「読み取り」操作が「書き込み」操作によって中断されないことを保証します。Nonatomicはこれを保証するものではありません。
アトミックでも非アトミックでも、1つのスレッドが読み取りを行い、2つのスレッドが書き込みを行う競合状態を解決しません。読み取り操作がどのような結果を返すかを予測する方法はありません。これは、追加の同期によって解決する必要があります。
アトミックでも非アトミックでも、全体的なデータの整合性を保証するものではありません。1つのスレッドが1つのプロパティを設定し、別のスレッドが2番目のプロパティを最初のプロパティの状態と矛盾する状態に設定する可能性があります。これは、追加の同期によっても解決する必要があります。
私の眉を上げるのは、人々が2つのキャンプに分かれていることです。
プロアトミック:nonatomic
パフォーマンスの最適化にのみ使用するのが理にかなっています。
また、最適化していない場合は、ポイント1のため、常にアトミックを使用する必要があります。これにより、マルチスレッドアプリケーションでこのプロパティを読み取るときに、完全ながらくたを取得することはありません。そして確かに、ポイント2と3を気にする場合は、その上に同期を追加する必要があります。
アトミックに対して:アトミックを使用することはまったく意味がありません。
アトミックはマルチスレッドアプリケーションのすべての問題を解決するわけではないため、とにかく同期コードを追加する必要があるため、アトミックを使用しても意味がありません。それは物事を遅くするだけです。
私はプロアトミックキャンプに傾倒していますが、何も見逃していないことを確認するために健全性チェックを行いたいと思います。