我收到以下错误:
main.m:14:1: warning: local declaration of 'a' hides instance variable
-(void)setA:(int)a {self.a=a;}
^
main.m: In function '-[Arithmetic setB:]':
main.m:16:1: warning: local declaration of 'b' hides instance variable
-(void)setB:(int)b {self.b=b;}
我的代码如下:
@interface Arithmetic:NSObject{
int a,b;
}
-(int)a;
-(void)setA:(int)a;
-(int)b;
-(void)setB:(int)b;
-(int)add;
@end
@implementation Arithmetic
-(int)a{
return a;
}
-(void)setA:(int)a {
self.a=a;
}
-(int)b {
return b;
}
-(void)setB:(int)b {
self.b=b;
}
-(int)add {
return [self a]+[self b];
}
@end
答案 0 :(得分:1)
我会像这样重写整个班级......
@interface Arithmetic:NSObject
@property (nonatomic, assign) NSInteger a;
@property (nonatomic, assign) NSInteger b;
- (NSinteger)add;
@end
@implementation Arithmetic
-(int)add {
return self.a + self.b;
}
@end
您收到警告消息的原因是因为您有一个ivar a
可以使用a
访问(不需要[self a]
)。然后你有一个名为a
的方法的参数,它隐藏了ivar。
答案 1 :(得分:0)
您收到该警告的原因是因为在函数中
-(void)setA:(int)a {self.a=a;}
参数(int)a
定义了一个名为a
的局部变量,它隐藏了接口中定义的int a
,因为它们都具有相同的名称,默认行为是支持局部变量而在全球范围内。所以它只是警告你,如果你试图访问更全局的a
,你就不会。