Propiedad sintetizada y variable con prefijo de subrayado: ¿qué significa esto?

Posible duplicado:
¿Subrayar el prefijo en el nombre de la propiedad?

¿Qué significa esto? @synthesize window=_window; Sé que, en general, significa que ‘alguna clase’ tiene una ventana, pero ¿por qué usar _window lugar de window ? ¿Esto es un espacio de nombres?

Voy a intentar describir esta convención de progtwigción en inglés básico.

Es una convención muy común en otros lenguajes nombrar las variables miembro con un m , m_ o _ para distinguirlas de las variables declaradas localmente y para indicar que deben tener los classInstance.m_Variable = 5 acceso escritos, si es necesario (no classInstance.m_Variable = 5 ).

Si un progtwigdor de Objective-C declara ivars siguiendo esta convención (y deberían) y usa la syntax básica @synthesize _window; entonces el uso de la propiedad se vuelve algo feo: classInstance._window = myWindow o [classInstance set_window:myWindow] . Usando la syntax @synthesize window=_window; permite al progtwigdor Obj-C utilizar un estándar de progtwigción popular (precediendo a ivars con _ ) mientras simultáneamente tiene acceso a propiedades que usan la classInstance.window = myWindow estándar de classInstance.window = myWindow y [classInstance setWindow:myWindow] .

Esto es algo muy común de hacer en la progtwigción / objective-C de iOS, tiene que ver con ivars. Para más información, puede leer aquí:

¿Por qué renombrar propiedades sintetizadas en iOS con guiones bajos destacados?

¿Cómo funciona un guión bajo al frente de una variable en una clase de cocoa objective-c?

Basado en mi experiencia al tener este hábito en mi código, me ayuda a escribir accidentalmente la ventana cuando me refiero a self.window y viceversa (no tiene que ser una ventana, sino cualquier otra variable)

La respuesta breve es: el subrayado es solo una convención útil para enfatizar el hecho de que las variables de clase son “privadas” para una clase y debe acceder a ellas a través de sus propiedades.

puedes declarar tu variable de window sin el subrayado inicial; en este caso, la statement @synthetize sería simplemente: @synthetize window , y sería prácticamente lo mismo.

para la respuesta larga, los enlaces publicados por aherlambang son realmente interesantes, lee …