Como acabo de encontrarme con este problema al editar código heredado, quiero hacer notas adicionales a las respuestas existentes que uno debe tener en cuenta.
Incluso con una versión de compilador más nueva, a veces hace una diferencia si la omites @synthesize propertyName
o no .
En el caso de que declare una variable de instancia sin guión bajo mientras la sintetiza, como:
Encabezamiento:
@interface SomeClass : NSObject {
int someInt;
}
@property int someInt;
@end
Implementación:
@implementation SomeClass
@synthesize someInt;
@end
self.someInt
accederá a la misma variable que someInt
. No usar un guión bajo para ivars no sigue las convenciones de nomenclatura, pero acabo de encontrar una situación en la que tuve que leer y modificar dicho código.
Pero si ahora piensa "Hey, @synthesize ya no es importante ya que usamos un compilador más nuevo", ¡está equivocado! Su clase resultará en tener dos ivars , es decir, someInt
más una _someInt
variable autogenerada . Por lo tanto, self.someInt
ya someInt
no abordará las mismas variables. Si no esperas tal comportamiento como lo hice, esto podría darte un dolor de cabeza para descubrir.