Objective-Cでは、アトミックプロパティと非アトミックプロパティの違いがあります。
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
私の理解では、複数のスレッドからアトミックとして定義されたプロパティを安全に読み書きできる一方で、複数のスレッドから非アトミックプロパティまたはivarに同時に書き込みおよびアクセスすると、不正なアクセスエラーなど、未定義の動作が発生する可能性があります。
したがって、Swiftに次のような変数がある場合:
var object: NSObject
安全にこの変数を並行して読み書きできますか?(これを行うことの実際の意味を考慮せずに)。
atomic
が、単純なデータ型を除いて、プロパティとのスレッドセーフな対話には一般的に十分とは見なされません。オブジェクトの場合、一般に、ロック(NSLock
または、または@synchronized
)またはGCDキュー(たとえば、シリアルキューまたは「リーダーライター」パターンの同時キュー)を使用して、スレッド間でアクセスを同期します。
atomic
オブジェクトのスレッドセーフ性が保証されていないだけです。(b)前述の同期手法の1つを適切に使用してスレッドの安全性を確保する場合(とりわけ、同時読み取り/書き込みを防止する場合)、アトミックな問題は疑わしいものです。しかし、atomic
本当の価値がある単純なデータ型については、まだ必要としています。良い質問!
@atomic
またはを使用できると思います@nonatomic
。またはデフォルトでアトミック。(Swiftは非常に不完全なので、今はあまり説明できません)