基元需要初始化为零吗?
问题描述:
我是否需要明确地将零元素置零,即将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.