En Objective-C tiene una distinción entre propiedades atómicas y no atómicas:
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
Según tengo entendido, puede leer y escribir propiedades definidas como atómicas de varios subprocesos de forma segura, mientras que escribir y acceder a propiedades no atómicas o ivars de varios subprocesos al mismo tiempo puede provocar un comportamiento indefinido, incluidos errores de acceso incorrecto.
Entonces, si tiene una variable como esta en Swift:
var object: NSObject
¿Puedo leer y escribir en esta variable en paralelo de forma segura? (Sin considerar el significado real de hacer esto).
atomic
generalmente no se considera suficiente para la interacción segura para subprocesos con una propiedad, excepto para tipos de datos simples. Para los objetos, generalmente se sincroniza el acceso a través de subprocesos utilizando bloqueos (p. Ej., NSLock
O @synchronized
) o colas GCD (p. Ej., Cola en serie o cola simultánea con patrón "lector-escritor").
atomic
no garantiza la seguridad de los subprocesos para los objetos; y (b) si uno usa correctamente una de las técnicas de sincronización mencionadas anteriormente para garantizar la seguridad de los subprocesos (entre otras cosas, evitando lecturas / escrituras simultáneas), el problema atómico es discutible. Pero todavía lo necesitamos / queremos para tipos de datos simples, donde atomic
tiene un valor real. ¡Buena pregunta!
@atomic
o@nonatomic
. o simplemente atómico por defecto. (Swift está tan incompleto que no podemos decir mucho ahora)