在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代码>