基元需要初始化为零吗?

问题描述:

我是否需要明确地将零元素置零,即将BOOL s设置为NO,将int s设置为0基元需要初始化为零吗?

是否需要明确指定NSString*nil@""

我知道指针必须明确设置为nil,否则它们可能会被填充垃圾。 (或仅用于Objective-C++?)

这取决于你在谈论什么样的变量。全局变量,静态变量和实例变量已保证初始化为0.

局部变量是一个不同的故事。他们从来没有初始化在所有默认情况下,所以你不应该读取它们的值,直到你初始化或设置它们。它并不是特别需要将它们初始化为0。例如,下面的代码是非常多余的:

Controller *controller = nil; 
int countOfThings = 0; 
controller = [Controller sharedInstance]; 
countOfThings = controller.totalThings - controller.thingsUsed; 

相反,你应该初始化变量,你真正想要的值:

Controller *controller = [Controller sharedInstance]; 
int countOfThings = controller.totalThings - controller.thingsUsed; 

初始化原语总是很好的编程习惯,但通常只有当您指向该变量时才有必要,除非有机会将其设置为除垃圾内存。

我相信编译器仍然会在“未初始化的变量”上抛出警告,但如果没有,XCode中肯定会有一个编译器复选框。

compiler flag for this-Wuninitialized,b.t.w.