这非常烦人,因为现在我的值被存储为默认情况下它们包含的东西(如c中所示)。我的所有OO东西现在都被破坏了,因为我的代表总是有些事。我很想知道为什么XCode对我这样做,因为默认情况下XCode总是将变量值设置为0或nil。
所以,如果我这样做 NSArray * anArray; 然后 NSLog(%@“%@”,anArray);
它可能会崩溃或记录最后分配的内存。这非常令人沮丧
答案 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还是有效地址)。