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 trialNic Huang
Courses Plus Student 10,573 Pointsproperty use, strong or weak ???
I just finished the second video "Creating a Custom Class - Part 2" in building BlogReader. The video states that we should use property "strong" in "parent to child relationship", and "weak" in "child to parent relationship" when we are creating property.
But how do you define "parent to child relationship" and "child to parent relationship"??
any good example ???
appreciate your help.
2 Answers
Amit Bijlani
Treehouse Guest TeacherThe easiest way to explain is by way of an example. When you create a UITableViewController
you have a main property pointing to the tableView
which would be of type strong
. However, the tableView
has two property delegate
and datasource
both of which are protocols that define methods. However, these methods are defined in the tableView
's parent class which is the table view controller.
Here's a diagram illustrating the above example:
Aaron Daub
Courses Plus Student 96 PointsIn the simplest of cases you use a strong relationship to keep something alive, and a weak relationship when something (that is being kept alive by something else) needs to refer back to what is keeping it alive.
A view controller has a view, that view is being kept alive by the view controller (the view controller has a strong relationship to it) but the view may want to communicate with its view controller. So that view could have a weak relationship to the view controller.
Nic Huang
Courses Plus Student 10,573 PointsThanks for you explanation. Looks like property involves different perspectives.
Because I am always wondering which property ( weak or strong ) I should assign when I create an IBOutlet or variable, and what would happen then if I assign improper property. I just can't see any difference
Nic Huang
Courses Plus Student 10,573 PointsNic Huang
Courses Plus Student 10,573 PointsThank for your explanation. Really helpful!! It sounds like table view controller is the grandpa of delegate and datasource property. That's why they are weak. I'm not sure if I get this right.
But let's say if I randomly create an UIButton and UITextView on storyboard and want to use property to manipulate them, what property should I give them, weak or strong ?? Because I've seen both.
Amit Bijlani
Treehouse Guest TeacherAmit Bijlani
Treehouse Guest TeacherIn your case of adding a control, think of it this way, the view controller is the parent class and the properties are its children. So yes, you would use the
strong
attribute for the properties. However, aUITextView
has a delegate property which would be implemented by the view controller so in that case the delegate property would be weak because theUITextView
is a child of the view controller.Nic Huang
Courses Plus Student 10,573 PointsNic Huang
Courses Plus Student 10,573 PointsI just watched ARC deep dive video. it talks about UITextView. Let me put this way to see if I really understand this.
I could use strong attribute for my UITextView property because it's a property of view controller, parent class. And UITextView has a weak-attributed delegate. When the view controller is gone, this delegate automatically goes away with UITextView ( Strong ) held by the view controller. So there is no point for view controller holding onto the delegate, that's why it is weak. ViewController is the center.
Hope I'm right.