Tema: Dudas en IOS
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/12/2012, 00:13
Avatar de jhonnyfernando
jhonnyfernando
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá - Colombia
Mensajes: 103
Antigüedad: 18 años, 7 meses
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 ;-)