So I have a NSString property named description, defined as follows:
@property (strong, nonatomic) NSMutableString *description;
I\'m able
@borrrden 's answer is very good. I just want to add some details.
Properties are actually just syntax sugar. So when you declare a property like you did:
@property (strong, nonatomic) NSMutableString *description;
It is automatically synthesized. What it means: if you don't provide your own getter + setter (see borrrden's answer), an instance variable is created (by default it has name "underscore + propertyName"). And getter + setter are synthesized according to the property description that you provide (strong, nonatomic). So when you get/set the property, it is actually equal to calling the getter or the seter. So
self.description;
is equal to [self description]
.
And
self.description = myMutableString;
is equal to [self setDescription: myMutableString];
Therefore when you define a setter like you did:
-(void)setDescription:(NSMutableString *)description
{
self.description = description;
}
It causes an infinite loop, since self.description = description;
calls [self setDescription:description];
.
1) NSObject
already has a method named description. Pick another name
2) Your setter is an infinite loop
But as to your actual question: The compiler will only autogenerate backing variables if you do not override both methods.
P.S. No, you can't just "use self.description instead" because then your getter would also be an infinite loop.