iOS Setters and Getters and Underscored Property Names

后端 未结 2 1899
臣服心动
臣服心动 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];.

提交回复
热议问题