Este post va dedicado a todos aquellos como yo, los cuales estamos familiarizandonos con iOS y nos cuesta un poquito entender las claúsulas atomic y nonatomic.
ATOMIC VS NONATOMIC
Vamos a entrar en el supuesto de que hacemos una clase clientes :
Clientes.h
Clientes.m
Entonces perdemos mucho tiempo implementando getters y setters con cada atributo de la clase, de todas maneras no hace falta hacerlo así, la clase ya sabe que esas propiedades(getters y setters) las tienen los atributos por defecto, en consecuencia al asignar la variable como a continuación, será suficiente.
Veamos como queda el archivo Clientes.h :
Y en el Clientes.m para usar el Get y Set
Diferencia entre atomic y nonatomic
Mediante la propiedad atomic hace que los metodos GET y SET sean "Safe-Thread", es decir que pone un semaforo a cada método para que no se pueda llamar al SET desde 2 hilos diferentes.
Si tus metodos GET y SET sólo dan y devuelven el atributo no es necesario ese control de Threads porque no va a dar errores, entonces en este caso, se usa nonatomic
ATOMIC VS NONATOMIC
Vamos a entrar en el supuesto de que hacemos una clase clientes :
Clientes.h
#import@interface Clientes{ NSString *id; NSString *nombre; NSString *direccion; }
Clientes.m
#import "Clientes.h"
@implementation Clientes
-(id) init
{
if( (self=[super init])) {
//Inicialización
}
return self;
}
-(NSString*) getid{
return id;
}
-(void) setid:(NSString*) nuevoId{
id = nuevoId;
}
//... Y así PARA CADA PROPIEDAD
@end
Entonces perdemos mucho tiempo implementando getters y setters con cada atributo de la clase, de todas maneras no hace falta hacerlo así, la clase ya sabe que esas propiedades(getters y setters) las tienen los atributos por defecto, en consecuencia al asignar la variable como a continuación, será suficiente.
Veamos como queda el archivo Clientes.h :
@interface Clientes{
@property (nonatomic) NSString* *id;
@property (nonatomic) NSString* *nombre;
@property (nonatomic) NSString* *direccion;
}
Y en el Clientes.m para usar el Get y Set
@interface Clientes{
self.nombre = @"Arturo" ; // Setnombre
int miedad = self.direccion; // getdireccion
}
Diferencia entre atomic y nonatomic
Mediante la propiedad atomic hace que los metodos GET y SET sean "Safe-Thread", es decir que pone un semaforo a cada método para que no se pueda llamar al SET desde 2 hilos diferentes.
Si tus metodos GET y SET sólo dan y devuelven el atributo no es necesario ese control de Threads porque no va a dar errores, entonces en este caso, se usa nonatomic

