¿Por qué Xcode 4 genera automáticamente una variable de instancia?

Vengo del desarrollo de C # y acabo de empezar a aprender Objective-C y Xcode 4. Por lo que entiendo, "@synthesize" está reemplazando los methods getter / setter para las properties si no necesitas verificar / controlar los valores que son siendo leido o escrito

¿Pero por qué Xcode 4 crea automáticamente una variable de instancia para mí?

¿No sería suficiente?

@synthesize myProperty; 

en lugar de:

 @synthesize myProperty = _myProperty; 

?

¿Por qué querría usar / tener la variable de instancia en lugar de la propiedad real si no tengo / necesito ningún obturador o configurador?

¡Gracias por adelantado!

MemphiZ

EDITAR:

Entiendo que @synthesize está reemplazando getters / setters pero para qué sirve esta parte: = _myProperty; ? ¿Por qué querría tener una variable de instancia si pudiera usar "myProperty" directamente? Entendería usar "_myProperty" si el configurador, por ejemplo, verificara una condición del valor. Si luego quiero omitir esta verificación, utilizaría _myProperty. Pero como uso @synthesize no tengo un setter en el lugar que verifique algo. Entonces, ¿por qué tengo / quiero una variable de instancia?

RESPONDER:

¡Mira los comentarios en la publicación de MattyG!

Esta es una convención utilizada para recordar al progtwigdor que tiene acceso a las variables de la instancia a través de los establecedores y getters con uno mismo. Entonces si estás usando:

 @synthesize myProperty = _myProperty; 

Luego para acceder a la variable directamente debe escribir:

 _myProperty = something; 

Para acceder a la variable a través de su configurador debe escribir:

 self.myProperty = something; 

El beneficio es que si olvidas acceder por ti mismo. entonces el comstackdor te advertirá:

 myProperty = something; //this won't compile 

Vea también esta pregunta .

Bueno, usted DECLARA la variable de instancia de una propiedad en el file .h, así como la propiedad en sí misma. La interfaz con la propiedad, así como la variable de instancia que usará, se han establecido con eso … su implementación no lo ha hecho. Ahí es donde entra la palabra key @synthesize. Simplemente implementa la propiedad para ti, para que no tengas que escribirla tú mismo.

Aquí hay forms de declarar properties en C #

 private int _int1; public int int1 { get { return _int1; } set { _int1 = value; } } 

Esta es una pieza bastante común de código, y C # le permite abreviarlo para evitar tener que escribir la misma cosa una y otra vez

 public int int1 { get; set; } 

La diferencia entre estos dos segmentos de código es que la variable privada "_int1" no existe en este último, ya que C # crea una variable internamente. La palabra key @synthesize es buena porque le ahorra la molestia de escribir el mismo código una y otra vez, al mismo time que le permite acceder a la variable de instancia en la que está basado.

Editar. También es importante tener en count que getters y setters existen en el objective C. Simplemente tienen nombres diferentes que en C #, donde están labeldos get {} y set {}. En el objective C, el getter es un método con el mismo nombre que su variable de instancia, y el setter es un método con la palabra 'set' seguido del nombre de la variable de instancia con la primera letra en mayúscula.

Entonces, digamos que tiene esto en su file .h

 int myVar; ... @property(nonatomic, assign) int myVar; 

Puede implementar getters y establecerse en el file .m

 -(int)myVar { return myVar; } -(void)setMyVar:(int)newVar { myVar = newVar; } 

o puede usar @synthesize para que el getter y el setter se escriban automáticamente