这是一个纯粹的理论问题:
我有一个包含变量的类: varX 。 我有一个方法来改变这个变量。 Xcode,自动完成建议:
-(void)setVarX:(float)varX;
在实现中,当我编写实例方法时,Xcode告诉我一个警告:
“'varX'的本地声明隐藏实例变量”
方法:
-(void)setVarX:(float)varX {
varX = varX;
}
所以,要解决,我在合成中使用了下划线;
@synthesize varX = _varX;
,方法是:
-(void)setVarX:(float)varX {
_varX = varX;
}
以这种方式在变量之前使用下划线是否合适?否则我如何使用Xcode建议的方法名称?
感谢
答案 0 :(得分:2)
使用_varX
是正确的方法。如果省略@synthesize
行(从Xcode 4.4开始),它将自动生成一个具有该名称的实例变量。
答案 1 :(得分:1)
当您不使用@synthesize
时,Xcode 4.4(及更高版本)会自动合成属性(因此不再需要@dynamic
)。自动合成使用下划线,因此Apple似乎希望这是一个惯例。
首先,我不喜欢这个想法,但现在我明白为什么它很方便。这些属性的变量名称在更多方法中不再“保留”(在其他情况下我从不使用下划线)。
答案 2 :(得分:0)
请注意,更改实例变量名称会有效地更改类,而更改方法参数名称则不会。
因此我更喜欢反过来这样做:
- (void)setVarX:(float)_varX {
varX = _varX;
}
这样就不需要更改实例变量名,它是类外部可见接口的一部分。