在我初始化变量之前,我想知道变量的默认值是什么......
例如,如果我这样做:
//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];
感谢您的回答。
高堤耶。
答案 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];
时,它应该会中断,抛出异常。
希望有所帮助