Objective c 目标C:平等==和严格平等===

Objective c 目标C:平等==和严格平等===,objective-c,equality,Objective C,Equality,作为一名Javascript程序员,我的脑海里一直在鼓动我尽可能地使用==而不是= 当我学习Objective C时,即使在官方文档中,我也只看到使用了= 我的问题是,我应该继续在我的目标C代码中使用严格平等的习惯吗?它和Javascript一样必要吗?我假设严格相等会稍微提高性能,但在目标C中,这种提高是否太小而不会产生很大的影响?非常简单,在目标C中,没有===运算符 您通常不使用==来比较对象,因为它比较的是指针值,而不是对象的值。因此,例如,如果要比较两个字符串,应使用: [string

作为一名Javascript程序员,我的脑海里一直在鼓动我尽可能地使用
==
而不是
=

当我学习Objective C时,即使在官方文档中,我也只看到使用了
=


我的问题是,我应该继续在我的目标C代码中使用严格平等的习惯吗?它和Javascript一样必要吗?我假设严格相等会稍微提高性能,但在目标C中,这种提高是否太小而不会产生很大的影响?

非常简单,在目标C中,没有===运算符

您通常不使用==来比较对象,因为它比较的是指针值,而不是对象的值。因此,例如,如果要比较两个字符串,应使用:

[stringObject isEqual:@"the string"];
这将比较字符串值,而不是指针。但是,使用==运算符比较对象是有充分理由的。许多委托回调都将sender对象作为参数。例如,如果使用一个控制器实现多个tableview,则需要检查哪个tableview正在调用您的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  if (tableView == self.firstTableView) {
     ...
  }

   if (tableView == self.secondTableView) {
     ...
  }
...
}

AFAIK在Objective-C中没有与===等价的东西

您可以使用==将int与float进行比较,由于其他原因,这不是一个好主意。 将两个ID(例如UIView*和UIButton*)与==进行比较时,比较指针值。如果这是真的/是的,那么它是一个完全相同的对象,而不仅仅是相等的对象。这是同一个例子

当比较对象的值是否相等时,使用isEqual:方法会更好。您可能必须在自己的子类中覆盖isEqual,以便在自己的对象中正确使用它


如果你有具体的问题/理由,我想我们可以更好地解释

类似于
==
的运算符在目标C中不存在

如果要比较两个对象,基本上有一条一般规则:对对象使用
相等:
,不要使用
=
。除非你非常确定你在做什么


这里有一个很好的链接可以深入了解:

JS中存在严格的相等运算符(==),因为如果比较两种不同的数据类型,则常规相等运算符(==)会执行隐式类型转换。其中一个参数将根据一组非直观的规则转换为与另一个参数匹配。例如,1==TRUE将为您提供“TRUE”,即使1是数字,TRUE是布尔值。有人知道Objective-C是否会进行这样的隐式类型转换吗?

请参见此。。在Javascript中使用
==
的原因仅仅是因为它的
==
操作符被破坏得难以置信。Objective-C中的
==
操作符没有被破坏,但它几乎肯定不能满足您的需要,至少对对象是如此。下面的两个答案解释了为什么以及你应该做什么。