When subclassing, I tend to give all my properties the attributes (nonatomic, strong), except for IBOutlet, which are (nonatomic, weak) when not top level objects in the nib.
Are there cases when such a habit could be unsafe, and create retain loops or have other such negative effects?
Thank you.
Yes this habit could be unsafe because you dont really seem follow the rules of the property attribute giving.
The right way to do this is to think about how the property will be used and give the corresponding attributes to it.
Some cases in where this could go wrong are:
A very quick guide for you:
If the property belongs mainly to the class even though the class might share it: strong
The class NEEDS the property to work: strong (but dont forget to nil the pointer when you no longer need it)
If this property belongs to another class: weak
delegate: weak
IBOutlets: weak
For the concurrency attribute you will usually be okay with nonatomic, unless you know that the property might be used by multiple threads then set it as atomic.
This is just a very vague guide but has worked for me under ARC very well.