Nonatomic y Atomic en Objetive-C

 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

#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





0 comentarios:

Publicar un comentario