我正在阅读一本关于 Objective-C 的书,作者说如果没有为局部变量赋值,它们将被设置为 nil,但静态变量将被设置为零。所以,我设置int a
并没有给它赋值。然后NSLog(@"%i", a)
显示它并a
显示为零。我对此有点困惑,我想知道是否有人可以为我澄清一下?
问问题
12479 次
2 回答
52
启用 ARC 后,无论您在何处创建它们,您的 Objective-C 对象指针变量都将设置为 nil。
如果没有 ARC,对于内置的 C 类型,您的变量将不会被初始化。
当你分配一个对象时,Objective-C 对象的实例变量总是设置为 0(或 nil)。
静力学设置为 0。
不过,我已经养成了总是给变量一个默认值的习惯。这是一个好习惯。
于 2012-04-05T03:26:43.163 回答
13
没有2。就像在“普通”C 中一样,局部变量没有分配默认值。(虽然你可能会在第一次使用堆栈的一部分时很幸运:不要依赖这个!。)
无论如何,nil
是0 1 - 也就是说,nil == 0
始终为真 - 所以NSLog("@%i", nil)
说“嘿,将参数记录为整数”,即 ... 0。
快乐编码。
1看到gdb中的nil没有定义为0x0?其中更详细地涵盖了技术定义,包括 Objective-C++ 案例。请注意,类型也会根据架构发生变化,因此对于特定系统"@%i"
很可能是错误的。
2请参阅 wbyoung 对ARC 特定规则的回答。
于 2012-04-05T02:56:17.943 回答