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) Animating and Intercepting Events Adding Sound

Question on instance variables

In the Build a Simple App project, during the Adding Sound video, the following is used to create an instance variable in the implementation file.

{
    SystemSoundID soundEffect;
}

Why wasn't a property declaration used, when should you use the above instead of a property(and vice versa) and what are the advantages and disadvantages of each method?

1 Answer

Holger Liesegang
Holger Liesegang
50,595 Points

Hi Joyce,

be sure to check out Should I Use a Property or an Instance Variable?.

Personally I prefer using properties to direct ivar access as they do at the Big Nerd Ranch but as the above info states: "...but take a sampling of the Objective-C community and you’ll find almost as many answers as there are developers" :)

Here is some more info to really understand the difference in more detail: Properties Encapsulate an Object’s Values/Most Properties Are Backed by Instance Variables

Thanks for the links Holger, they actually cleared up some questions I had.

Another question: If by using a property, a variable is created whose name starts with an underscore, then to follow this convention, shouldn't the above example be SystemSoundID _soundEffect. I know it doesn't make a difference towards the functionality of the app, but I just want to know the set 'Good programming practices' and conventions.

Holger Liesegang
Holger Liesegang
50,595 Points

You do no longer need to synthesize your properties in the implementation file and the compiler automatically creates an iVar with the "underscore camel case logic" for you. I personally would also use the "underscore camel case logic" when creating the variable for the property manually - but technically, it won't matter indeed, as you already wrote...

A Motivation for ivar decorations :)