假设我想创建一个 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 语言(即 CC++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/

10-09 16:04