2

可能重复:
ObjectiveC: if (obj) {…} AND if (obj != nil) {…},哪个更好?

这两种情况有区别吗:

if (!object) {
 // do something
}

和 。. .

if (object == nil) {
 // do something
}
4

2 回答 2

9

不,没有区别。这两个例子完全相同。从 C 规范6.5.3.3 一元算术运算符

如果其操作数的值比较不等于 0,则逻辑否定运算符的结果!为 0,如果其操作数的值比较等于 0,则为 1。结果类型为int。表达式!E等价于(0==E)

因为nil是 0,所以最后一句话完全适用。

于 2012-08-12T21:34:44.293 回答
1

如果 object 是 typeid或任何有效的 Objective-C 对象,那么只有一个区别:可读性。(即从编译器的角度来看,它们都是相同的。)

但是,在比较时可能会有一些例子nil不是很好。例如,如果出于某种邪恶的不合逻辑的原因, object 是 an int,则只有以下两个语句是有效的:

if (object == 0)

if (!object)

并且它们将再次等效,但是将 int 与指针(即nil)进行比较(除非整数是显式常量 0)是非法的,并且很可能会导致编译器警告(在大多数情况下,它仍然可以工作,但是...)

于 2012-08-12T21:34:37.530 回答