Possible Duplicate:
Underscore prefix on property name?
What does this mean? @synthesize window=_window;
I know that in general it means that 'some class' has a window, but why use _window
instead of just window
? Is this a namespace thing?
Possible Duplicate:
Underscore prefix on property name?
What does this mean? @synthesize window=_window;
I know that in general it means that 'some class' has a window, but why use _window
instead of just window
? Is this a namespace thing?
short answer is: the underscore is just a convention useful to stress the fact that class variables are "private" to a class and you should access them via their properties.
you could declare your
window
variable without the leading underscore; in this case the @synthetize statement would be simply:@synthetize window
, and it would be practically the same.for the long answer, the links posted by aherlambang are really interesting read...
I'll give a go at describing this programming convention in basic English.
It is a very common convention in other languages to name member variables with a preceding
m
,m_
, or_
to distinguish them from locally declared variables and to signify that they should have accessors written, if necessary (noclassInstance.m_Variable = 5
).If an Objective-C programmer declares ivars following this convention (and they should) and uses the basic syntax
@synthesize _window;
then the usage for the property becomes somewhat ugly:classInstance._window = myWindow
or[classInstance set_window:myWindow]
. Using the syntax@synthesize window=_window;
allows the Obj-C programmer to utilize a popular programming standard (preceding ivars with_
) while simultaneously having property accessors that use the Apple standardclassInstance.window = myWindow
and[classInstance setWindow:myWindow]
.This is a very common thing to do in iOS programming/objective-C, it has to do with ivars. For more information you can read here:
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?
Based on my experience in having this habit in my code, it helps me to accidentally writing window when you mean self.window and vice-versa (doesn't have to be window, but any other variables as well)