假设我想创建一个 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
为 0,这里的代码会使 argument
变量未初始化。因此,您将记录随机值,然后导致程序其余部分中的值损坏;并且很难发现问题出在哪里!如果使用未初始化的引用,则很可能会得到
EXC_BAD_ACCESS
。关于objective-c - 在 Cocoa 中声明对象时,我应该将它们设置为 nil 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1262444/