objective c - negrita - Propiedad sintetizada y variable con prefijo de subrayado: ¿qué significa esto?
subrayado html css (3)
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?
Esto es algo muy común en la programación / objetivo-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 cacao objetivo-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 declaración @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 ...
Voy a intentar describir esta convención de programació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 programador de Objective-C declara ivars siguiendo esta convención (y deberían) y usa la sintaxis básica @synthesize _window;
entonces el uso de la propiedad se vuelve algo feo: classInstance._window = myWindow
o [classInstance set_window:myWindow]
. Usando la sintaxis @synthesize window=_window;
permite al programador Obj-C utilizar un estándar de programació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]
.