Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community!
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.Start your free trial
Shen JIE LIN10,612 Points
Hi, so I am a little confused about objective-C variables, below is an example
in my .h file, I declared a property with the following line
@property (strong, nonatomic) NSArray *predictionsBackgroundColor;
then in my .m file, I alloc and initialize it with some UIColor objects that is all fine
but when I try to refer to it in a button pressed method, the compiler tells me that i need to refer to it as the following:
self.predictionLabel.backgroundColor = _predictionsBackgroundColor;
what is the reasons for adding that extra "_" ??????
because it actually worked, and referred to the proper variable @_@
Stone Preston42,016 Points
when you create a property named propertyName, behind the scenes the compiler creates an instance variable named _propertyName. you can use _propertyName to access the property directly, or you can use self.propertyName to access the property through its getter and setter methods. Most of the time you will want to use the setter/getter methods so you refer to it as self.propertyName.
your code should have worked either way:
//access the instance variable directly self.predictionLabel.backgroundColor = _predictionsBackgroundColor; //access it using the getter/setter methods self.predictionLabel.backgroundColor = self.predictionsBackgroundColor;
Vladimir Cezar7,710 Points
To refer to a property you either user its accessor method:
or the instance variable that is automatically created for you
The extra "_" means that you are directly accessing the instance variable that has been declared autmatically by the @property method. In the back-end of the @property method somewhere, this code is being initialized:
If you feel the need to access the variable indirectly, the accessor method created by the @property statement does that for you
As you may recall from one of the Objective-C videos here on Treehouse, adding "_" before a variable name is an indication to both yourself and others that the variable is an instance variable i.e. it is conventional