覆盖setter方法并获取"xxx隐藏实例变量的本地声明"

Ben*_* Lu 1 setter xcode overriding objective-c ios

我有一个整数变量,例如timeSignature,在.h文件中声明它,并合成了一对setter/getter方法:

在.h:

@interface Metronome : NSObject {
    int timeSignature;
}
@property (nonatomic) int timeSignature;
Run Code Online (Sandbox Code Playgroud)

在.m:

@synthesize timeSignature;
Run Code Online (Sandbox Code Playgroud)

我希望覆盖setter方法:当用户为其设置新值时,它会执行其他操作以及更改为新值:

- (void) setTimeSignature:(int)timeSignature {
    self.timeSignature = timeSignature; //hides instance variable warning at this line
    [self doesSomethingElse];
}
Run Code Online (Sandbox Code Playgroud)

并且问题是,本地变量和实例变量具有相同的名称.

我怎么能避免这个?

jrt*_*ton 6

重命名参数变量名称:

- (void) setTimeSignature:(int)newTimeSignature { 
    timeSignature = newTimeSignature; //hides instance variable warning at this line 
    [self doesSomethingElse]; 
} 
Run Code Online (Sandbox Code Playgroud)

另外,不要在setter中使用该属性,这将创建一个无限循环!self.timeSignature =将调用setTimeSignature!

这是人们使用下划线名称(_timeSignature)作为属性的支持ivar的原因之一.


Rom*_*nko 5

命名你的ivar _timeSignature并制作@synthesize timeSignature = _timeSignature;