Mostrando entradas con la etiqueta Objetive C. Mostrar todas las entradas
Mostrando entradas con la etiqueta Objetive C. Mostrar todas las entradas

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





Mensajes y tipos de datos de Objetive-C para iOS

Los mensajes y los datos se relacionan de una forma especial con los objetos en Objetive-C




Tipos de datos y mensajes

  •  Mensajes 
Los objetos son muy autónomos comportándose como contenedores activos de estados y comportamientos. Cualquier mensaje puede ser pasado a cualquier objeto, un mensaje es una solicitud para desarrollar una acción en particular.
Las expresiones de mesajes en Objetive-C se encierran entre [ ].
Las expresiones tienen varias partes
  • El objeto al que se le envia : RECEPTOR
  • Cada objeto tiene un NOMBRE
  • Opcionalmente pueden tener PARÁMETROS




  • Datos
DATOS PRIMITIVOS : Ni se tiene que reservar memoria ni se tienen que inicializar.
  • int : número entero positivo o negativo.
  • unsigned :  entero positivo.
    • double :  número con punto flotante (decimal).
    • char : Carácter
    • Bool :  Booleano

    OBJETOS BÁSICOS : Se usa alloc para reservarles memoria, e init para inicializarlos.
    • NSObject : Tipo básico del cual todos heredan.
    • NSString : Cadena de caracteres.
    • NSInteger : Números enteros.
    • NSArray :  Colección de elementos de tamaño fijo.
    • NSMutableArray : Colección de elementos de tamaño variable.
    • NSDictionary :  Colección de pares de elementos clave-valor, de tamaño fijo.
    • NSMutableDictionary : Colección de de pares de elementos clave-valor, de tamaño variable.
    • NSSet : Colección de datos únicos sin orden alguno.
    • NSData : Datos binarios.
    • Id :  Este dato puede apuntar a cualquier tipo de objeto.

    OTROS TIPOS DE DATOS
    • NSUrl : Objeto tipo URL.
    • NSNumber : Almacena tipos numéricos como objetos.
    • NSDate :  Inicializa un objeto tipo fecha y hora actual, para darla formato o convertirla a cadena, se usa NSDataformatter.


    OBJETOS
     En Objetive-C sólo podemos referirnos a los objetos mediante putneros. (int *variable)
    @interface NOMBRECLASE : NOMBRECLASEPADRE
    @interface Clientes:NSObject{
    int id;
    NSString nombre;
    NSString direccion;
    }@end


    FUNCIONES O MÉTODOS
    Usan la palabra self para referirse a la propia instancia del objeto y la palabra super para la clase de la que hereda. Los métodos que empiezan por - son métodos de instancia, mientras que los que empiezan por + son métodos de clase. Estos se pueden llamar igual sin que se produzcan errores.
     [ object metodoConEntrada : entrada ];
    Salida = [object metodoConSalida ];
    Salida = [object metodoConEntradaSalida : entrada ];
     Y se declaran así
     TIPO IDENTIFICACION(-/+) (TIPO RETORNO) insertObject:(id) onObject NOMBREMETODO :(TIPO PARAMETRO) NOMBREPARAMETRO
    -(void)insrtObject:(id) onObject NOMBREMETODO : (NSUInteger) parámetro1