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! While you're at it, check out some resources Treehouse students have shared here.
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 trialShen JIE LIN
10,612 PointsObjective-C variables
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[0];
what is the reasons for adding that extra "_" ??????
because it actually worked, and referred to the proper variable @_@
3 Answers
Stone Preston
42,016 Pointswhen 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[0];
//access it using the getter/setter methods
self.predictionLabel.backgroundColor = self.predictionsBackgroundColor[0];
Vladimir Cezar
7,710 PointsTo refer to a property you either user its accessor method:
self.propertyName
or the instance variable that is automatically created for you
_property
Here is a full explanation: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html
Joseph Potts
11,187 PointsThe 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:
NSArray *_predictionsBackgroundColor;
If you feel the need to access the variable indirectly, the accessor method created by the @property statement does that for you
self.predictionsBackgroundColor[0]
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