假设我想创建一个实例NSString
,该实例根据另一个变量的值初始化为某个值.通常,我会这样做
NSString *string; if(foo == 1) string = @"Foo is one."; else string = @"Foo is not one.";
但是,在我看到的一些示例代码中,我见过人们这样做
NSString *string = nil; if(foo == 1) string = @"Foo is one."; else string = @"Foo is not one.";
这两者有什么区别,哪种方法更受欢迎?
我个人的偏好是立即初始化任何变量.但是,在您提供的示例中,这两种方法是等效的.
在C
语言(例如C
,C++
,Obj-C
)未立即初始化可能包含随机的垃圾值的变量.在初始化之前使用该变量会导致意外行为(从希望崩溃到获得意外行为).
示例 考虑以下示例:
int abs; if (argument > 0) abs = argument; else if (argument < 0) abs = -1 * argument; NSLog(@"%i", abs);
abs
如果argument
为0 ,代码会保留未初始化的变量.因此,您将记录随机值,然后导致破坏程序其余部分的值; 并且很难发现问题出在哪里!
如果你使用未初始化的参考,你很可能会得到一个EXC_BAD_ACCESS
.