Foros del Web » Programación para mayores de 30 ;) » Programación móvil »

Dudas en IOS

Estas en el tema de Dudas en IOS en el foro de Programación móvil en Foros del Web. Hola buenas, Estoy manos a la obra con el desarrollo en IOS y veo que cuando declaras un nueva propiedad en la interfaz se añade ...
  #1 (permalink)  
Antiguo 23/12/2012, 08:28
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Dudas en IOS

Hola buenas,

Estoy manos a la obra con el desarrollo en IOS y veo que cuando declaras un nueva propiedad en la interfaz se añade la sigiuente línea en nuestro header file:

Código objective c:
Ver original
  1. @property (nonatomic, retain) IBOutlet UILabel *myLabel;
Después veo que también se añade en nuestro fichero de implementación, la línea:

Código objective c:
Ver original
  1. @synthesize myLabel;


Alguien puede explicarme para que se usan? yo programo en PHP y tengo las bases de JAVA, me iria bien un equivalente en el caso de que este exista,

Muchas gracias y un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #2 (permalink)  
Antiguo 28/12/2012, 00:13
Avatar de jhonnyfernando  
Fecha de Ingreso: abril-2006
Ubicación: Bogotá - Colombia
Mensajes: 103
Antigüedad: 18 años
Puntos: 1
De acuerdo Respuesta: Dudas en IOS

Hola miktrv.

Como bien sabes por tu experiencia y bases en JAVA y PHP los métodos getter y setter ayudan a la encapsulación y control de las variables de clase, pues bien, en Objective-C se usan casi de la misma forma pero en la implementación de Objective-C 2.0 se introducen las propiedades para que el compilador implemente los metodos getter y setter de forma automática y así nos ahorren un poco de trabajo.

Entonces te voy a exponer las dos formas (la antigua y la reciente, sin propiedades y con propiedades) para que te lleves una idea de como se usan y para que sirven las propiedades en Objective-C.

ANTIGUA

la antigua forma de definir un getter y un setter seria:

Header file:
Código Objective-C:
Ver original
  1. /*Prueba.h*/
  2.  
  3. #import <Foundation/Foundation.h>
  4.  
  5. @interface Prueba:NSObject{
  6.     NSInteger edad; //variable u objeto de instancia
  7. }
  8.  
  9. - (id)init; //Constructor
  10. - (void)setEdad:(NSInteger)edad; //Método setter
  11. - (NSInteger)edad; //Método getter
  12.  
  13. @end

Implement file:
Código Objective-C:
Ver original
  1. /*Prueba.m*/
  2.  
  3. #import "Prueba.h"
  4.  
  5. @implementation Prueba
  6.  
  7. - (id)init{
  8.     if((self = [super init]){
  9.         edad = 0;
  10.     }
  11.     return self;
  12. }
  13.  
  14. - (void)setEdad:(NSInteger)edad{
  15.     edad = edad;
  16. }
  17.  
  18. - (NSInteger)edad{
  19.     return edad;
  20. }
  21. @end


NUEVA FORMA

De la nueva forma ya no tendríamos que definir los getter's y setter's pues el compilador se encarga de hacerlo por nosotros (Que maravilla no?)

Header file:
Código Objective-C:
Ver original
  1. /*Prueba.h*/
  2.  
  3. #import <Foundation/Foundation.h>
  4.  
  5. @interface Prueba:NSObject{
  6.     NSInteger edad; //variable u objeto de instancia
  7. }
  8. @property NSInteger edad;
  9. - (id)init; //Constructor
  10.  
  11. @end

Implement file:
Código Objective-C:
Ver original
  1. /*Prueba.m*/
  2.  
  3. #import "Prueba.h"
  4.  
  5. @implementation Prueba
  6.  
  7. @synthesize edad;
  8. - (id)init{
  9.     if((self = [super init]){
  10.         edad = 0;
  11.     }
  12.     return self;
  13. }
  14.  
  15. @end

Entonces, cuando el compilador encuentra @property y @synthesize lo que hace (en tiempo de compilación) es expandirlas a la antigua.

Ahora, si me pregunta ¿Qué es eso de "(nonatomic, retain)"?, pues bueno, la estructura para definir una propiedad es:

@property (modificadores) tipo nombrePropiedad;

-"retain" se usa cuando la variable de instancia a la cual estamos implementando la propiedad es un puntero a un objeto de Objective-C y verifica en el método getter que la variable no sea nil (null)

-"nonatomic" se usa cuando no se desea que los métodos getter's y setter's se implementen de forma atómica es decir, en un bloque sincronizado.


Pues bien, eso es todo!!!!

Ahhhhhh, nota importante, ya que esta característica pertenece a Objective-C 2.0, solo serviran en los mas recientes runtimes de MAC OS X e IOS (las versiones se las debo)
__________________
Gracias por los puntos!

Saludes ;-)
  #3 (permalink)  
Antiguo 28/12/2012, 06:18
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Dudas en IOS

Magnifica respuesta!!

Un saludo y gracias por todo!!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #4 (permalink)  
Antiguo 06/05/2013, 15:43
 
Fecha de Ingreso: junio-2012
Mensajes: 18
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Dudas en IOS

Agrego a la respuesta de jhonnyfernando lo siguiente:

Si estás trabajando con iOS 6 no es necesario implementar el @synthesize dado que esto se hace por defecto.

Si implementas a mano AMBOS getter y setter entonces si debes implementar el @synthesize.

Saludos

Etiquetas: dudas, ios, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 08:05.