2

在objective-c中,每个非零对象都评估为真,这是真的吗?也就是说,是这样的:

if (thing) NSLog(@"yes");

与此相同:

if (thing != nil) NSLog(@"yes");

从经验上看,这似乎是正确的,即使thing = @0,但我找不到实际说明这一点的文档。

4

5 回答 5

4

这是真的。

@0将是一个NSNumber值为 0 的对象,而不是地址 0 (nil)。

于 2012-12-12T21:10:07.710 回答
3

是的,每个不是nil(或NULL)的指针都计算为真,就像在古老的 C 中一样。对于像 之类的对象也是如此NSNull,听起来它们可能会计算为假。

于 2012-12-12T21:09:51.077 回答
3

是的,因为 Objective-C 是 C 之上的一层,所以同样的规则适用。

在 C 中,每个非 NULL 变量/指针的计算结果都为真,因此在 Objective-C 中也是如此

@0表示指向 a 的非 NULL 指针,NSNumber因此它正确地计算为真。

于 2012-12-12T21:10:11.690 回答
3

if 检查 0 (false) 或任何其他数字 (true)。由于您的“事物”基本上是一个地址(因此是一个有效数字),因此它将评估为“真”。

于 2012-12-12T21:10:17.430 回答
2
((@0) && ([NSNULL null]) && (YES) && (thing) && (int a = 2))

评估为TRUEYES分别除非thing==nil

于 2012-12-12T21:40:19.530 回答