2

我想知道以下两种惰性实例化形式中的哪一种会生成更快的汇编代码。这是代码:

第一个:

if (!_separatorTopBorderColor) _separatorTopBorderColor = UIColorFromHex(0x393A3B);
return _separatorTopBorderColor;

第二:

_separatorTopBorderColor = _separatorTopBorderColor ?: UIColorFromHex(0x393A3B);
return _separatorTopBorderColor;
4

4 回答 4

1

这可能是 10 年前的一个问题,但如今,编译器确实看到了ternary运算符和if-else语句的任何区别。我的建议是你应该专注于让你的代码更具可读性、可维护性和高效性。在这种情况下,不要关心资源或内存使用情况。

于 2012-05-21T19:18:25.267 回答
1

不,就这么简单。为什么要这样做。

于 2012-05-21T19:15:28.583 回答
1

这实际上是三元运算符与常规 if 语句的问题。两者都不会更快,所以这真的是美学/偏好的问题。

于 2012-05-21T19:11:14.370 回答
0

好吧,选择更具可读性的那个。

现在,从编译器优化的角度来看,大多数优化编译器都包含一个称为“if-conversion”或类似的优化器通道,它可以将 SIMPLE 分支转换为条件移动指令。在您的情况下,您在其中一个分支中有一个函数调用,所以这没关系。其次,在具有良好分支预测的超标量 OoO 处理器上,与简单分支相比,条件移动在大多数情况下是一种悲观化,因此实际上针对此类 CPU 的编译器很可能不会进行 if 转换。

于 2012-05-21T19:17:18.970 回答