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