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

时间:2013-05-15 09:22:39

标签: objective-c equality

作为一名Javascript程序员,我已尽头使用===代替==

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

我的问题是,我应该继续在Objective C代码中使用严格相等的习惯吗?它是否与Javascript一样必要?我认为严格的平等会略微提升性能,但是在Objective C中,这种提升太小而不能产生太大影响吗?

4 个答案:

答案 0 :(得分:5)

这很简单,在Objective C中,你没有===运算符。

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

[stringObject isEqual:@"the string"];

这会比较字符串值,而不是指针。但是有正当理由使用==运算符来比较对象。许多委托回调都将sender对象作为参数。例如,如果要使用一个控制器实现多个tableview,则需要检查调用方法的tableview:

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

AFAIK在Objective-C中没有等同的===。

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

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

如果你有一些具体的问题/抽样,我想我们可以更好地解释它。

答案 3 :(得分:1)

目标C中不存在===等运算符。

如果你想比较两个对象,基本上有一个通用规则:使用isEqual:并且不要将==用于对象 。除非你非常确定,你在做什么。

这里有很好的链接来深入了解知识:ObjectComparison