2011-05-18 10 views
18

Duplicar posible:
Underscore prefix on property name?Propiedad sintetizada y variable con el prefijo del subrayado: ¿qué significa esto?

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

+0

echa un vistazo a esta pregunta relacionada: http://stackoverflow.com/questions/3521254/prefixing-property-names-with-un-underscore-in-objective-c – filipe

+2

Duplicados: [1] (http: // stackoverflow .com/questions/3521254) [2] (http://stackoverflow.com/questions/822487/) [3] (http://stackoverflow.com/questions/2371489) [4] (http: // stackoverflow. com/questions/5582448 /) [5] (http://stackoverflow.com/questions/837559/) [y así sucesivamente ...] (http://stackoverflow.com/search?q=objc+property+underscore) –

Respuesta

25

Voy a dar un ir en la descripción de esta convención de programación en Inglés básico.

Es una convención muy común en otros idiomas a variables miembro nombre con un precedente m, m_, o _ para distinguirlos de los declarada localmente variables, y para significar que deberían tener descriptores de acceso por escrito, si es necesario (sin classInstance.m_Variable = 5).

Si un programador Objective-C declara Ivars siguientes esta convención (y deberían) y utiliza la sintaxis básica @synthesize _window; entonces el uso de la propiedad se convierte en algo feo: classInstance._window = myWindow o [classInstance set_window:myWindow]. El uso de la sintaxis @synthesize window=_window; permite que el programador Obj-C utilice un estándar de programación popular (precediendo a ivars con _) mientras que simultáneamente tiene acceso a propiedades que usan el estándar de Apple classInstance.window = myWindow y [classInstance setWindow:myWindow].

4

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

Why rename synthesized properties in iOS with leading underscores?

How does an underscore in front of a variable in a cocoa objective-c class work?

Basado en mi experiencia en tener este hábito en mi código, que me ayuda a escribir ventana de forma accidental cuando quiere decir self.window y vice- versa (no tiene que ser una ventana, sino cualquier otra variable)

3

respuesta breve es: el guión bajo es solo una convención útil para enfatizar el hecho de que las variables de clase son "privadas" para una clase y debe acceder ellos a través de sus propiedades.

puede declarar su variable 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 se leen realmente interesante ...

Cuestiones relacionadas