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/*Prueba.h*/
#import <Foundation/Foundation.h>
@interface Prueba:NSObject{
NSInteger edad; //variable u objeto de instancia
}
- (id)init; //Constructor
- (void)setEdad:(NSInteger)edad; //Método setter
- (NSInteger)edad; //Método getter
@end
Implement file:
Código Objective-C:
Ver original/*Prueba.m*/
#import "Prueba.h"
@implementation Prueba
- (id)init{
if((self = [super init]){
edad = 0;
}
return self;
}
- (void)setEdad:(NSInteger)edad{
edad = edad;
}
- (NSInteger)edad{
return edad;
}
@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/*Prueba.h*/
#import <Foundation/Foundation.h>
@interface Prueba:NSObject{
NSInteger edad; //variable u objeto de instancia
}
@property NSInteger edad;
- (id)init; //Constructor
@end
Implement file:
Código Objective-C:
Ver original/*Prueba.m*/
#import "Prueba.h"
@implementation Prueba
@synthesize edad;
- (id)init{
if((self = [super init]){
edad = 0;
}
return self;
}
@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)