Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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中,是包含';你没有被赋值为零吗?_Objective C_Variables_Primitive - Fatal编程技术网

在Objective-C中,是包含';你没有被赋值为零吗?

在Objective-C中,是包含';你没有被赋值为零吗?,objective-c,variables,primitive,Objective C,Variables,Primitive,如果我的.h文件中有此项: int index; 然后在.m文件中,我有: if (index == nil) 我还没有给索引赋值,这是真的吗 编辑 我猜nil只用于对象。那么,尚未赋值的int的状态是什么呢?在赋值之前,该变量在技术上是未定义的(可能有任何值)。最有可能的是,它将等于零。此外,nil和NULL都定义为零。但是,不建议进行这种比较。比较指针时应仅使用nil(它不用于原语)。nil是为Objective-C对象指针保留的特定值。它与NULL(0)非常相似,但与消息传递一起使用时

如果我的
.h
文件中有此项:

int index;
然后在
.m
文件中,我有:

if (index == nil)
我还没有给
索引
赋值,这是真的吗

编辑

我猜nil只用于对象。那么,尚未赋值的int的状态是什么呢?

在赋值之前,该变量在技术上是未定义的(可能有任何值)。最有可能的是,它将等于零。此外,nil和NULL都定义为零。但是,不建议进行这种比较。比较指针时应仅使用nil(它不用于原语)。

nil是为Objective-C对象指针保留的特定值。它与NULL(0)非常相似,但与消息传递一起使用时具有不同的语义

像int这样的本地基元数据类型在Objective-C中没有初始化。在写入之前,不会定义索引的值

void foo () {
   //initialize local variable
   int x = 5;
}

//initialise static variable
static int var = 6; 
ints没有“nil”这样的词。这是一个对象值。至于默认情况下初始化为哪些变量:

  • 非静态局部变量不会初始化为任何定义的值(实际上,它们通常具有它们占用的内存中以前的任何位模式)
  • 静态变量初始化为0
  • 全局变量初始化为0
  • 实例变量初始化为0

请注意,上面的第一条规则也适用于局部对象变量。它们不会为您初始化为零。(但对象类型的实例变量将为。)

尚未赋值的整数的值取决于其声明-如果不为其赋值,则具有静态存储持续时间的
int
为零。具有自动或已分配存储持续时间的
int
,如果不显式初始化,则可以具有任何值


顺便说一句,在头文件中添加这样的对象声明肯定会让您以后感到痛苦。

如果它们具有静态存储持续时间,它们将被初始化为0,对吗?我不认为任何原语类型都是在C/Objective-C中初始化的。你应该总是自己初始化原语变量。具有静态存储持续时间的变量在C中肯定是零初始化的(C99§6.7.8.10)。很可能,但并不总是@Kevin说得对,你应该总是初始化变量。但是,
int
是对象的IVAR,在调用
[obj init]时初始化为0