局部变量设置为nil? (目标C)

时间:2012-04-05 02:47:30

标签: objective-c instance-variables null static-variables

我正在读一本关于Objective-C的书,作者说如果没有为局部变量赋值,它们将被设置为nil,但静态变量将被设置为零。所以,我设置int a并没有给它赋值。然后NSLog(@"%i", a)显示它,a显示为零。我对此感到有些困惑,我想知道是否有人可以为我澄清一下?

2 个答案:

答案 0 :(得分:47)

启用ARC后,无论您在何处创建它们,Objective-C对象指针变量都将设置为nil。

如果没有ARC,对于内置C类型,您的变量将不会被初始化。

分配对象时,Objective-C对象的实例变量始终设置为0(或nil)。

静态设置为0。

我已经养成了总是给变量赋予默认值的习惯。这是一个很好的习惯。

答案 1 :(得分:12)

没有 2 。就像在“普通”C中一样,局部变量分配了默认值。 (虽然你第一次使用部分堆栈时可能会很幸运:依赖于它!)

无论如何,nil 0 1 - 也就是说,nil == 0始终为真 - 所以NSLog("@%i", nil)说“嘿,将参数记录为整数“,这是...... 0。

快乐的编码。


1 更详细地参见nil in gdb is not defined as 0x0?,其中包括技术定义,包括Objective-C ++案例。请注意,类型也会根据体系结构而变化,因此对于特定系统,"@%i"很可能错误

2 请参阅wbyoung对 ARC特定规则的回答。