Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 局部变量设置为零?(目标-C)_Objective C_Instance Variables_Null_Static Variables - Fatal编程技术网

Objective c 局部变量设置为零?(目标-C)

Objective c 局部变量设置为零?(目标-C),objective-c,instance-variables,null,static-variables,Objective C,Instance Variables,Null,Static Variables,我正在读一本关于Objective-C的书,作者说如果局部变量没有赋值,它们将被设置为零,但是静态变量将被设置为零。所以,我设置了inta,但没有给它赋值。然后NSLog(@“%i”,a)显示它,而a显示为零。我对此有点困惑,我想知道是否有人能帮我澄清一下。就像在“普通”C中一样,局部变量没有被指定默认值。(虽然第一次使用堆栈的一部分时您可能会很幸运:但不要依赖于此!) 无论如何,nil是01——也就是说,nil==0总是正确的——所以NSLog(“@%i”,nil)说“嘿,把参数记录为整数”,

我正在读一本关于Objective-C的书,作者说如果局部变量没有赋值,它们将被设置为零,但是静态变量将被设置为零。所以,我设置了
inta
,但没有给它赋值。然后
NSLog(@“%i”,a)
显示它,而
a
显示为零。我对此有点困惑,我想知道是否有人能帮我澄清一下。就像在“普通”C中一样,局部变量没有被指定默认值。(虽然第一次使用堆栈的一部分时您可能会很幸运:但不要依赖于此!)

无论如何,
nil
是01——也就是说,
nil==0
总是正确的——所以
NSLog(“@%i”,nil)
说“嘿,把参数记录为整数”,这是。。。0

快乐编码


我将更详细地了解其中包含的技术定义,包括Objective-C++案例。请注意,类型也会根据体系结构的不同而变化,因此对于特定系统来说,
“@%i”
很可能是错误的


2有关ARC特定规则,请参见wbyoung的答案。

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

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

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

静态设置为0


不过,我习惯于总是给变量一个默认值。这是一个很好的习惯。

静态变量也是这样吗?因为,作者说给静态变量赋值是多余的,因为它们的默认值是零。启用ARC时,对象是。@stumped:是的,
static
variables被初始化为0。如果书上说你写的时候,我建议你把它扔进垃圾箱,找一本不同的书。Nil和0实际上是同义词。局部变量(保存为ARC下的对象引用)将未定义。静态变量和实例变量将是nil/zero/NULL/nil,它们是同义的。同意bbum;那太可怕了。这本书到底是什么?另请参见:带弧的C类型如何?如果我在使用ARC时有一个BOOL呢?谢谢@里卡多:他们应该按照C规则处理。静态将为0,所有其他应视为垃圾。谢谢。比如@property(非原子,赋值)BOOL标志;是加盖布,是吗?因为这不是staitc。但是在我的应用程序中,我看到它总是0。我没有非常清楚的这些规则。@Ricardo该属性由实例变量支持,而不是局部变量。因此,它属于实例变量规则,并将设置为0/FALSE/nil。对于任何寻找此答案来源的人,请参阅苹果的文档转换为ARC发行说明。具体来说,标题为堆栈变量的部分用nil初始化。