变量的作用域目标C(Scope of variables Objective C)

2019-06-26 16:19发布

不要在方法声明的变量的方法调用完成后,将被删除? 也就是说,如果我有办法“的someMethod”和每次调用我想从一个堆属性返回不同的NSString将方法返回堆栈中的下一个对象或因为x是在删除会保持它返回的第一个索引时间方法调用的结束。 我知道如果C变量在后函数调用抹去,是不是目标C一样的吗? 将使用变量一个单独的属性有些X的这个问题呢? 谢谢

(Double) someMethod{
int x;
[self.stack objectAtIndex:x];
x++;
}

看完评论后,我尝试创建一个属性来替换x,这里是我写的,但我得到一个错误警告,指出_location“局部声明‘’隐藏的实例变量”这是什么意思?

@property (nonatomic) int location;
@synthesize location=_location;

-(int) location{
    if(!_location){
        int _location = 0;
     //warning is here 
    return _location;
     }
_location++;
return _location;

}

 (Double) someMethod{
int x;
[self.stack objectAtIndex:self.location];
x++;
}

Answer 1:

不要在方法声明的变量的方法调用完成后,将被删除?

Objective C的方法实现“上面”的C函数,所以适用同样的规则。 特别是,你的代码表现出不确定的行为(未初始化的变量的读数)。

要解决此问题,添加一个实例变量x的地方,您的代码段目前声明了自动变量。


自动变速器是“堆栈”的变量,即你里面的方法/函数声明变量的“官方”名称。



Answer 2:

是的,局部变量的生存期仅限于封闭的功能正在执行的时间(与例外,但你不使用那些在这种情况下)。

你的计数器x可能是最好的作为对象属性,如果你想保持它的调用之间的值someMethod



Answer 3:

回答您关于该警告的问题...

它只是说,当你宣布你的里面。如果方法的位置()

int _location = 0;

这个局部变量具有相同的名称前面创建的属性

@syntenshize location = _location

因此,它变得混乱(为程序员)知道他此刻正在使用的是哪一个。

编译器会明白,如果_location里面是一个int ...和如果_location外面是你的财产。



文章来源: Scope of variables Objective C