- 声明时变量的默认值 -

时间:2010-04-14 07:42:58

标签: iphone variables initialization declaration header-files

在我初始化变量之前,我想知道变量的默认值是什么......

例如,如果我这样做:

//myClass.h

BOOL myBOOL; // default value ?
NSArray *myArray; // default value ?
NSUInteger myInteger; // default value ?

这里还有一些例子:

//myClass.m
// myArray is not initialized, only declared in .h file

if ([myArray count] == 0) { // TRUE or FALSE ?

// do whatever

}

更一般地说,当我这样做时会返回什么:

[myObjectOnlyDeclaredAndNotInitialized myCustomFunction];

感谢您的回答。

高堤耶。

3 个答案:

答案 0 :(得分:2)

答案是它取决于定义变量的范围。

Objective-C对象的实例变量总是初始化为0 / nil / false,因为分配的内存为零。

全局变量可能初始化为0 / nil / false,因为当内存首次分配给进程时,它也会被操作系统归零。但是,当然,我从不依赖它,而是总是自己初始化它们。

本地变量未初始化,并且将包含随机数据,具体取决于堆栈的增长/缩小。

对于指向Objective-C对象的指针,您可以安全地将消息发送到nil。所以,例如:

NSArray* foo = nil;
NSLog(@"%@ count = %d", foo, [foo count]);

是完全合法的,并且会在没有崩溃的情况下运行,例如:

2010-04-14 11:54:15.226 foo[17980:a0f] (null) count = 0

答案 1 :(得分:0)

默认情况下,NSArray值为nil,如果你不初始化它。

答案 2 :(得分:0)

//myClass.h

BOOL myBOOL; // default value ?
NSArray *myArray; // default value ?
NSUInteger myInteger; // default value ?

Bool myBool如果没有初始化将收到默认值False。

NSArray * myArray如果未分配,则初始化(例如NSArray *myArray = [[NSArray alloc] init];)将具有默认值NIL。如果你对一个单元化数组调用count,你将收到一个不是0的异常。

//myClass.m
// myArray is not initialized, only declared in .h file

if ([myArray count] == 0) { => here it should crash because of [myArray count]

// do whatever

}

对于NSUInteger myInteger,默认值应为0,文档说这是用于描述无符号整数(我没有; t表示与这一整数的整数)

当你致电[myObjectOnlyDeclaredAndNotInitialized myCustomFunction];时,它应该会中断,抛出异常。

希望有所帮助