可能重复:
ObjectiveC: if (obj) {…} AND if (obj != nil) {…}, which is better?
这两个条件之间是否存在差异:
if (!object) {
// do something
}
和。 。 。
if (object == nil) {
// do something
}
答案 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 - 是非法的并且很可能导致编译器警告(在大多数情况下)例如,它仍然有效,但是......)