iOS Setters and Getters and Underscored Property Names

后端 未结 2 1902
臣服心动
臣服心动 2020-12-30 11:06

So I have a NSString property named description, defined as follows:

@property (strong, nonatomic) NSMutableString *description;

I\'m able

相关标签:
2条回答
  • 2020-12-30 11:58

    @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];.

    0 讨论(0)
  • 2020-12-30 12:08

    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.

    0 讨论(0)
提交回复
热议问题