iOS安装程序和Getters和下划线的属性名称

所以我有一个名为description的NSString属性,定义如下:

@property (strong, nonatomic) NSMutableString *description; 

当我定义getter时,我可以将其引用为_description,如下所示:

 - (NSString *)description { return _description; } 

但是,当我定义一个setter时,如下所示:

 -(void)setDescription:(NSMutableString *)description { self.description = description; } 

它打破了前面提到的getter(未声明的标识符)的描述。 我知道我可以使用self.description代替,但为什么会发生?

@borrrden的回答非常好。 我只是想添加一些细节。

属性实际上只是语法糖。 所以当你声明一个像你这样的财产时:

 @property (strong, nonatomic) NSMutableString *description; 

它是自动合成的。 这意味着:如果你没有提供你自己的getter + setter(参见borrrden的答案),就会创build一个实例variables(默认情况下它的名字是“underscore + propertyName”)。 而getter + setter是根据你提供的属性描述(强,非primefaces)合成的。 所以当你获得/设置属性时,它实际上等于调用getter或seter。 所以

 self.description; 

等于[self description] 。 和

 self.description = myMutableString; 

等于[self setDescription: myMutableString];

因此,当你像你一样定义一个setter:

 -(void)setDescription:(NSMutableString *)description { self.description = description; } 

它会导致无限循环,因为self.description = description; 来电[self setDescription:description];

1) NSObject已经有一个名为description的方法。 select另一个名字

2)你的setter是一个无限循环

但是至于你的实际问题:如果你不重写这两个方法,编译器将只会自动生成支持variables。

PS不,你不能只是“使用self.description”,因为那么你的getter也将是一个无限循环。