3

作为一名 Javascript 程序员,它一直在我脑海中被使用===,而不是==尽可能地使用。

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

我的问题是,我应该继续在我的 Objective C 代码中使用严格相等的习惯吗?它和Javascript一样有必要吗?我会假设严格相等会带来轻微的性能提升,但在 Objective C 中,这种提升是否太轻微而无法产生太大影响?

4

4 回答 4

7

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

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

[stringObject isEqual:@"the string"];

这比较的是字符串值,而不是指针。然而,使用 == 运算符比较对象是有正当理由的。许多委托回调将发送者对象作为参数。例如,如果你用一个控制器实现多个 tableview,你想检查哪个 tableview 正在调用你的方法:

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

   if (tableView == self.secondTableView) {
     ...
  }
...
}
于 2013-05-15T09:30:29.933 回答
2

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

于 2013-10-01T03:20:04.647 回答
1

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

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

在比较对象的值是否相等时,最好使用 isEqual: 方法。您可能必须在自己的子类中覆盖 isEqual 才能将其与您自己的对象正确使用。

我认为,如果您有一些具体的问题/示例,那么我们可以更好地解释它。

于 2013-05-15T09:34:57.653 回答
1

===Objective C 中不存在类似的运算符。

如果你想比较两个对象,基本上有一个通用规则:使用isEqual:和不==使用对象。除非你很确定,否则你在做什么。

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

于 2013-05-15T09:38:12.380 回答