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 trial

iOS Build a Simple iPhone App (iOS7) Refactoring into a Model Understanding @property

Ivars using _ vs self

Can someone elaborate more on when one would use the self.propery vs. the _ property for calling an instance variable?

2 Answers

Thomas Nilsen
Thomas Nilsen
14,957 Points

This is copied from a book I have. I think it's a great explanation:

? Properties and instance variables have a lot in common. In fact, when you create a property, it is “backed” by an instance variable. That means your slider property stores its value in an instance variable named _slider (note the leading underscore). This instance variable was automatically added to the view controller by the Objective-C compiler. Why? Well, a property needs to store its value somewhere and an instance variable is a good place for that. You can tell the difference between the two because properties are always accessed using self. This uses the property:

self.slider.value = 50;

This uses the backing instance variable directly:

_slider.value = 50;

So what is the added benefit of using a property over an instance variable? There are several reasons but mainly instance variables are supposed to be used only by the insides of an object. Other objects aren’t intended to see them or use them. Properties, however, can be accessed by other objects that are outside of your view controller. You’ll learn much more about this in the next tutorials because “information hiding” is an important topic in object-oriented programming. By the way, properties are not just for making outlets. It is customary to use properties for the outlets in your storyboard, but as you will see later, you can also make properties for things that are not in the storyboard.

Basically you would use _property in init, getter and setter methods. Anywhere else you would use self.property.