Objective c 再次声明变量时是否可以随机设置?

Objective c 再次声明变量时是否可以随机设置?,objective-c,xcode,variables,methods,declaration,Objective C,Xcode,Variables,Methods,Declaration,在我的方法中,我声明了一些变量,包括int blockCount。我多次调用此方法。使用Xcode调试器,我发现在第二次调用该方法后,blockCount的值被设置为364265,而它被设置为2,就在几毫秒之前 这不是一个真正的问题,因为我可以将它设置为0或任何其他我想要的数字,但反复声明某个变量是否是一个坏的编程习惯?我对编程非常陌生,我想确保我用正确的方式做事。:) 如果您声明了一个变量,但没有为其提供值,则该变量被视为“未初始化”。C中未初始化的变量有一个“未定义”的值——它通常是垃圾,包

在我的方法中,我声明了一些变量,包括
int blockCount。我多次调用此方法。使用Xcode调试器,我发现在第二次调用该方法后,
blockCount
的值被设置为364265,而它被设置为2,就在几毫秒之前


这不是一个真正的问题,因为我可以将它设置为0或任何其他我想要的数字,但反复声明某个变量是否是一个坏的编程习惯?我对编程非常陌生,我想确保我用正确的方式做事。:)

如果您声明了一个变量,但没有为其提供值,则该变量被视为“未初始化”。C中未初始化的变量有一个“未定义”的值——它通常是垃圾,包含上次在该地址写入内容时发生的任何内容。但严格来说,“未定义”意味着您在任何情况下都不应尝试使用该值。(如果你搜索“鼻魔”,这将用丰富多彩的、有用的术语解释。*)

该变量是局部变量,每次方法运行时都会重新创建,因此每次传递时都会获得一个新的实际值,尽管在技术上尚未定义

通常建议不要让变量处于未初始化状态,因为“随机”值可能会导致很难找到的bug,并且偶尔会召唤前面提到的鼻恶魔。您没有做错任何事情,但是如果您没有在声明的一两行内设置实际值,我建议将其初始化为0或某种合理的默认值:

int blockCount = 0;


*另请参见:

我一直认为变量已经按照约定初始化为0,但显然不是。谢谢你的解释!只有
static
变量,以及在ARC下的对象指针,而不是像
int
这样的原语。很高兴我能帮忙@timjver我想补充一点,既然你说你是编程新手,这就是为什么会这样的原因之一。初始化为0需要少量CPU时间。通过不初始化,这是一个轻微的性能提升。毕竟,您很可能希望从一个不同于0的值开始。初始化为0是一个可以跳过的步骤。@JMack听起来不错,但是为什么不能用静态变量跳过它呢?@tim:有两个原因,都是因为静态变量在程序的生命周期中存在。首先,它们只初始化一次,这意味着设置为0的(已经很小的)性能影响在启动时只发生一次。第二,因为您经常使用静态变量来保存创建成本很高但不需要更改的数据。为了确保只创建一次,变量最初需要有一个可以检查的已知值。例如,
void f(void){static void*昂贵的数据;if(昂贵的数据==NULL){//initialize}//使用数据