Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c (!object)和(object==nil)之间有区别吗?_Objective C_Ios - Fatal编程技术网

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)