如何检查无

时间:2013-11-20 04:14:53

标签: objective-c null

我目前正在研究objective-c和基本的c编程语言。

我对特定代码行有疑问:

if (!balance)

Balance是一个创建的对象。我知道这段代码正在检查对象余额是否为零,这是正确的吗?

有人可以解释一下代码究竟是如何检查nil的吗?如果balance的值为非零,则返回0,如果值为0,则返回1吗?

提前致谢。

4 个答案:

答案 0 :(得分:1)

在Objective-C中,nil大致类似于0NULLfalse,但对于对象指针。在if语句中,它的行为与上述标量值之一相同。例如,以下两个if语句应该产生相同的结果:

NSNumber *balance = nil;

if (!balance) {
    // do something if balance is nil
}

if (balance == nil) {
    // do something if balance is nil
}

答案 1 :(得分:0)

NSLog应该返回(null)(可能是nil的描述),而不是控制台中的NULL。您的支票应如下所示:

 if (!controller) 
 {
     // do some stuff here
 }

答案 2 :(得分:0)

如果balancenil,那么它将成为指向0x0的指针。该地址永远不会用于有效对象。

在C中,评估为零的if内的任何内容都被视为否定响应,评估为非零的任何内容都是肯定响应。

指针评估其地址 - 就像将它们转换为整数类型一样。 !表示“不”。

所以测试是if(address of balance is not zero)

答案 3 :(得分:0)

首先,您需要了解if的工作原理。基本上,任何非零值都被视为true,零值被视为false。

if (10)之类的简单内容将被视为true,而if (0)则视为false。

任何表达式的计算结果为零值或非零值。

对象指针只是一个数字 - 一个内存地址。 nil指针只是地址0.任何非零指针都有一个非零地址。

!运算符否定了该状态。非零值将被视为零值,反之亦然。

所以现在结合所有这些。

Foo *bar = nil;
if (bar) // false since bar is nil (or zero)

Foo *bar = [[Foo alloc] init]; // some non-nil value
if (bar) // true since bar is non-zero

Foo *bar = nil;
if (!bar) // true since !bar mean "not bar" which is "not zero" which is "non-zero"

Foo *bar = [[Foo alloc] init]; // some non-nil value
if (!bar) // false since !bar mean "not bar" which is "not non-zero" which is "zero"