我在读一本关于Objective-C和撰文称,如果本地变量没有赋值,他们将被设为零,但静态变量将被设置为零。 所以,我成立了int a
,并没有给它分配一个值。 然后NSLog(@"%i", a)
来显示它和a
被显示为零。 我对有些困惑,我想知道,如果有人能澄清一下吗?
Answer 1:
启用ARC,你的Objective-C对象指针变量将被设置成零不论你在何处创建它们的。
如果没有ARC,并以C类型,你的变量不会被初始化。
Objective-C的对象的实例变量总是被设置为0(或无)时分配一个对象。
静被设置为0。
我已经得到的总是给人一种默认值变量的习惯,虽然。 这是一个好习惯。
Answer 2:
2号。 正如在“普通” C,局部变量没有被分配一个默认值。 (虽然你可能会得到幸运堆栈的第一次部分用于: 不靠这个!)
无论如何, nil
为 0 1 -也就是说, nil == 0
始终是真实的-所以NSLog("@%i", nil)
说:“哎,登录参数作为一个整数”,这是... 0。
编码愉快。
1见在gdb零没有被定义为为0x0? 覆盖技术的定义,包括所述目标C ++的情况下,在更多的细节。 请注意,这取决于架构以及类型变化,使"@%i"
很可能是错误的特定系统。
2见wbyoung的回答特定ARC-规则。
文章来源: Local variables set to nil? (Objective-C)