作为一名 Javascript 程序员,它一直在我脑海中被使用===
,而不是==
尽可能地使用。
当我学习Objective C时,即使在官方文档中,我也只看到==
被使用过。
我的问题是,我应该继续在我的 Objective C 代码中使用严格相等的习惯吗?它和Javascript一样有必要吗?我会假设严格相等会带来轻微的性能提升,但在 Objective C 中,这种提升是否太轻微而无法产生太大影响?
作为一名 Javascript 程序员,它一直在我脑海中被使用===
,而不是==
尽可能地使用。
当我学习Objective C时,即使在官方文档中,我也只看到==
被使用过。
我的问题是,我应该继续在我的 Objective C 代码中使用严格相等的习惯吗?它和Javascript一样有必要吗?我会假设严格相等会带来轻微的性能提升,但在 Objective C 中,这种提升是否太轻微而无法产生太大影响?
这很简单,在 Objective C 中,你没有 === 运算符。
您通常不使用 == 来比较对象,因为它比较的是指针值,而不是对象的值。因此,例如,如果要比较两个字符串,则应使用:
[stringObject isEqual:@"the string"];
这比较的是字符串值,而不是指针。然而,使用 == 运算符比较对象是有正当理由的。许多委托回调将发送者对象作为参数。例如,如果你用一个控制器实现多个 tableview,你想检查哪个 tableview 正在调用你的方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.firstTableView) {
...
}
if (tableView == self.secondTableView) {
...
}
...
}
JS 中存在严格相等运算符 (===),因为如果您比较两种不同的数据类型,常规相等运算符 (==) 会进行隐式类型转换。一个参数将根据一组不直观的规则转换为与另一个参数匹配。例如, 1 == TRUE 会给你“真”,即使 1 是一个数字并且 TRUE 是一个布尔值。有人知道 Objective-C 是否会进行这样的隐式类型转换吗?
AFAIK 在 Objective-C 中没有等同于 === 的东西。
您可以使用 == 将 int 与 float 进行比较,但出于其他原因,这不是一个好主意。当您使用 == 比较两个 id(例如 UIView* 和 UIButton*)时,您将比较指针值。如果那是 TRUE/YES,那么它是一个相同的,甚至不仅仅是相等的对象。这是同一个例子。
在比较对象的值是否相等时,最好使用 isEqual: 方法。您可能必须在自己的子类中覆盖 isEqual 才能将其与您自己的对象正确使用。
我认为,如果您有一些具体的问题/示例,那么我们可以更好地解释它。
===
Objective C 中不存在类似的运算符。
如果你想比较两个对象,基本上有一个通用规则:使用isEqual:
和不==
使用对象。除非你很确定,否则你在做什么。
这里有很好的链接来深入了解:ObjectComparison