(!object)和(object == nil)之间有区别吗?

时间:2012-08-12 21:32:47

标签: objective-c ios

  

可能重复:
  ObjectiveC: if (obj) {…} AND if (obj != nil) {…}, which is better?

这两个条件之间是否存在差异:

if (!object) {
 // do something
}

和。 。 。

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

2 个答案:

答案 0 :(得分:9)

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

  

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

由于nil为0,因此最后一句完全适用。

答案 1 :(得分:1)

如果object为id类型或任何有效的Objective-C对象,则只存在一个差异:可读性。 (即从编译器的角度来看,它们都是相同的。)

但是,与nil进行比较可能会有一些例子不太好。例如,如果出于某些邪恶的非理性原因,对象是int,只有以下两个语句才有效:

if (object == 0)

if (!object)

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