作为一名Javascript程序员,我已尽头使用===
代替==
。
当我学习Objective C时,即使在官方文档中,我也只看到==
被使用。
我的问题是,我应该继续在Objective C代码中使用严格相等的习惯吗?它是否与Javascript一样必要?我认为严格的平等会略微提升性能,但是在Objective C中,这种提升太小而不能产生太大影响吗?
答案 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