XCode编译器没有将我的变量(和指针)初始值设置为0或nil!

时间:2010-10-21 15:53:52

标签: xcode pointers compiler-construction null

这非常烦人,因为现在我的值被存储为默认情况下它们包含的东西(如c中所示)。我的所有OO东西现在都被破坏了,因为我的代表总是有些事。我很想知道为什么XCode对我这样做,因为默认情况下XCode总是将变量值设置为0或nil。

所以,如果我这样做  NSArray * anArray; 然后 NSLog(%@“%@”,anArray);

它可能会崩溃或记录最后分配的内存。这非常令人沮丧

2 个答案:

答案 0 :(得分:2)

C,Objective C和C ++都将全局变量初始化为零/ null / Nil。局部变量不会自动初始化,必须明确初始化。

此外,指向NSArray的指针不是 NSArray。在使用该指针之前,您应该安排NSArray实际上在它的末尾。例如,制作一个新的,更像是

    // NSArray* anArray = new NSArray;  // if using a C++ backend
    NSArray* anArray = [[NSArray alloc] init];  // if using an Objective-C backend
    // ...
    NSLog(%@"%@", anArray);

答案 1 :(得分:1)

在这方面,Objective C的行为与C非常相似,即默认情况下不会初始化非全局变量。代码防御性地始终显式初始化指针变量(无论是NULL还是有效地址)。