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 Objective-C Basics (Retired) Introduction to Objective-C Inheritance

Christopher Ruggles
Christopher Ruggles
1,253 Points

How can property be designated to a class?

I am trying to answer this challenge. Now sure how to designate a class for a property.

Finally, we have a class named 'Bling' which needs to have a property called 'ruby'. Switch over to 'Bling.h' and add a property named 'ruby' that belongs to the class 'Ruby'.

2 Answers

A property can be created with @property, and it goes between the @interface and @end similar to this video at around 1:35.

Here is another video about @property.

Michael Hulet
Michael Hulet
47,912 Points

Above the @interface declaration, you need to tell the compiler what you're talking about when you declare your @property later on. This is done using @class, in this case. When you do that, the compiler will know what you're talking about later on. This code for that file passes:

//The below line is where you tell the compiler about the Ruby class. It's kinda like using #import "Ruby.h", but this way, you don't unnecessarily get a bunch of stuff from Ruby
@class Ruby;

@interface Bling : NSObject
//Here is where you declare your @property. From left to right, saying it's a property automatically gives you an instance variable, and setter and getter methods for that variable. What's in the parentheses says that it's not thread-safe (which has to do with multithreading) and tells the system to hold a strong pointer to it. You'll learn more about what all that means later. Then, you're saying that it's an instance of the Ruby class, and finally naming the property "ruby"
@property (nonatomic, strong) Ruby *ruby;