可能重复:
ObjectiveC: if (obj) {…} AND if (obj != nil) {…},哪个更好?
这两种情况有区别吗:
if (!object) {
// do something
}
和 。. .
if (object == nil) {
// do something
}
可能重复:
ObjectiveC: if (obj) {…} AND if (obj != nil) {…},哪个更好?
这两种情况有区别吗:
if (!object) {
// do something
}
和 。. .
if (object == nil) {
// do something
}
不,没有区别。这两个例子完全相同。从 C 规范6.5.3.3 一元算术运算符:
如果其操作数的值比较不等于 0,则逻辑否定运算符的结果
!
为 0,如果其操作数的值比较等于 0,则为 1。结果类型为int
。表达式!E
等价于(0==E)
。
因为nil
是 0,所以最后一句话完全适用。
如果 object 是 typeid
或任何有效的 Objective-C 对象,那么只有一个区别:可读性。(即从编译器的角度来看,它们都是相同的。)
但是,在比较时可能会有一些例子nil
不是很好。例如,如果出于某种邪恶的不合逻辑的原因, object 是 an int
,则只有以下两个语句是有效的:
if (object == 0)
和
if (!object)
并且它们将再次等效,但是将 int 与指针(即nil
)进行比较(除非整数是显式常量 0)是非法的,并且很可能会导致编译器警告(在大多数情况下,它仍然可以工作,但是...)