In Objective-C hai una distinzione tra proprietà atomiche e non atomiche:
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
Dalla mia comprensione è possibile leggere e scrivere proprietà definite come atomiche da più thread in modo sicuro, mentre la scrittura e l'accesso a proprietà non atomiche o ivar da più thread contemporaneamente può comportare un comportamento indefinito, inclusi errori di accesso non valido.
Quindi, se hai una variabile come questa in Swift:
var object: NSObject
Posso leggere e scrivere in parallelo su questa variabile in modo sicuro? (Senza considerare l'effettivo significato di farlo).
atomic
generalmente non è considerato sufficiente per l'interazione thread-safe con una proprietà, ad eccezione dei tipi di dati semplici. Per gli oggetti, in genere si sincronizza l'accesso attraverso i thread utilizzando blocchi (ad esempio, NSLock
o @synchronized
) o code GCD (ad esempio, coda seriale o coda simultanea con pattern "lettore-scrittore").
atomic
non garantisce la sicurezza dei thread per gli oggetti; e (b) se si utilizza correttamente una delle suddette tecniche di sincronizzazione per garantire la sicurezza dei thread (tra le altre cose, impedire letture / scritture simultanee), la questione atomica è discutibile. Ma ne abbiamo ancora bisogno / lo vogliamo per tipi di dati semplici, dove atomic
ha un valore reale. Buona domanda!
@atomic
o@nonatomic
. o solo atomico per impostazione predefinita. (Swift è così incompleto, non possiamo dire molto ora)