Objective c (!object)和(object==nil)之间有区别吗?
可能重复:Objective c (!object)和(object==nil)之间有区别吗?,objective-c,ios,Objective C,Ios,可能重复: 这两种情况之间是否存在差异: if (!object) { // do something } 而且 if (object == nil) { // do something } 如果对象的类型为id或任何有效的Objective-C对象,则只存在一个区别:可读性。(也就是说,从编译器的角度来看,它们都是相同的。) 然而,当与nil进行比较时,可能会有一些例子。例如,如果出于某种邪恶的不合逻辑的原因,对象是int,则只有以下两条语句是有效的: if (object == 0
这两种情况之间是否存在差异:
if (!object) {
// do something
}
而且
if (object == nil) {
// do something
}
如果对象的类型为
id
或任何有效的Objective-C对象,则只存在一个区别:可读性。(也就是说,从编译器的角度来看,它们都是相同的。)
然而,当与nil
进行比较时,可能会有一些例子。例如,如果出于某种邪恶的不合逻辑的原因,对象是int
,则只有以下两条语句是有效的:
if (object == 0)
及
它们同样是等价的,但将int与指针(即
nil
是)进行比较(除非整数是一个显式常量0)是非法的,并且很可能导致编译器警告(在大多数情况下,它仍然可以工作…不,没有区别。这两个例子完全相同。根据C规范6.5.3.3一元算术运算符:
逻辑求反运算符的结果代码>
如果其操作数的值比较不等于0,则为0;如果其操作数的值比较等于0,则为1。结果的类型为int
。表达式!E
相当于(0==E)
因为
nil
是0,所以最后一句话正好适用。在iOS上,nil被定义为((void*)0)-所以如果object
不是指针,这可能是无效的。@H2CO3,是的,我假设object
是指针。如果不是,与nil
进行比较无论如何都是错误的。当然,这是一个有效的假设。:)只是一个小问题。
if (!object)