¿Cómo se implementan las propiedades atómicas en ObjC?

En primer lugar, los no atómicos usan bloqueos para asegurarse de que ningún otro subproceso pueda obtener / establecer un valor cuando otro subproceso esté realizando alguna tarea en él.

El bloqueo se logra usando la palabra clave * @ sincronizada *. ¿Qué hace exactamente @synchronized?

Ahora responda a su pregunta:

Si ve la implementación real del atributo * atómico * y * no atómico *, puede ver fácilmente lo que realmente está sucediendo.

Cuando yo escribo:

// @ propiedad (no atómica, retener) NSString * myName;

Genera el siguiente código:

– (NSString *) myName {
devuelve myName;
}

– (nulo) setMyName: (NSString *) myName_ {
[miNombre_ retener];
[lanzamiento de myName];
myName = myName_;
}

Tenga en cuenta que no hay una palabra clave * atómica *, si no especifica * no atómica *, la propiedad es atómica, pero si especifica * atómica * explícitamente se producirá un error.

Ahora la variante atómica es más complicada:

// @ propiedad (retener) NSString * myName;

– (NSString *) myName {
UITextField * retval = nil;
@synchronized (self) {
retval = [[mi nombre retener] liberación automática];
}
retorno retval;
}

– (nulo) setMyName: (NSString *) myName_ {
@synchronized (self) {
[lanzamiento de myName];
miNombre = [miNombre_ retener];
}
}

Básicamente, la versión atómica tiene que tomar un candado para garantizar la seguridad del hilo, y también está aumentando el recuento de referencia en el objeto (y el recuento de liberación automática para equilibrarlo) de modo que se garantice que el objeto exista para la persona que llama, de lo contrario es una posible condición de carrera si otro subproceso está configurando el valor, lo que hace que el recuento de referencias caiga a 0

En realidad, hay una gran cantidad de variantes diferentes de cómo funcionan estas cosas dependiendo de si las propiedades son valores u objetos escalares, y cómo interactúan los elementos de retención, copia, solo lectura, no atómico, etc. En general, los sintetizadores de propiedades simplemente saben cómo hacer “lo correcto” para todas las combinaciones.
Para más ref