【问题标题】:is there a difference between (!object) and (object == nil)? [duplicate](!object)和(object == nil)之间有区别吗? [复制]
【发布时间】: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


    【解决方案1】:

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

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

    由于nil 为0,所以最后一句完全适用。

    【讨论】:

    • 在 iOS 上,nil 被定义为 ((void *)0) - 所以如果 object 不是指针,这可能是无效的。
    • @H2CO3,是的,我假设object 是一个指针。如果不是,那么与nil 进行比较无论如何都是错误的。
    • 当然,这是一个有效的假设。 :) 只是一个小问题。
    【解决方案2】:

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

    但是,与nil 相比,可能会有一些例子不太好。例如,如果出于某种邪恶的不合逻辑的原因,对象是 int,则只有以下两个语句是有效的:

    if (object == 0)
    

    if (!object)
    

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

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-12-06
      • 2023-03-11
      • 2010-11-28
      • 2012-04-04
      相关资源
      最近更新 更多