变量的本地声明隐藏实例变量

时间:2015-04-14 07:05:18

标签: objective-c

我收到以下错误:

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

2 个答案:

答案 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,你就不会。