我发现了各种各样的人/文章(例如this SO answer),它们表明Objective-C中指针的值在您为其指定某些内容之前未定义。但是,我发现在实践中,他们将自动设置为我叫alloc
甚至在nil
- 下面的代码我运行,而无需断言:指针是否始终设置为零?
NSString* foo; // 1
assert(foo==nil); // foo is nil
foo = [NSString alloc]; // 2
assert(foo!=nil); // after alloc, not nil.
foo = [foo init]; // 3
assert(foo!=nil); // still not nil
可以/我应该靠这个?它是保证还是只是碰巧在某种调试模式下运行我的编译器(Xcode)? (我是Objective-C的新手)。
一个必然的问题:在标记为1,2和3的行末尾描述foo
的正确术语是什么?我想至少有一个被称为'未初始化',并且其中一个'已初始化',但是其中,我们称之为第三个选项?
页头对象之后进行初始化,通常不==零。等于零它是错误 – theWalker 2012-01-30 22:52:34
可能的重复http://stackoverflow.com/questions/3989377/xcode-compiler-doesnt-set-my-variable-and-pointer-initial-value-to-0-or-nil – 2012-01-30 22:54:35