【发布时间】:2014-06-16 13:39:38
【问题描述】:
Swift 编译器是否足够聪明,可以优化掉返回相同对象的多个重复方法调用?或者,我应该先将返回值分配给一个常量,然后再使用它吗?
-
例如:
Table View Programming Guide for iOS 表示在向
UITableViewCell的contentView添加子视图时,请避免使它们透明。 “由于合成成本增加,透明子视图会影响滚动性能。”所以,我经常做以下事情:
class EmployeeCell: UITableViewCell { var nameLabel: UILabel var titleLabel: UILabel // ... init(style: UITableViewCellStyle, reuseIdentifier: String) { nameLabel = UILabel(frame: CGRectZero) nameLabel.backgroundColor = UIColor.whiteColor() titleLabel = UILabel(frame: CGRectZero) titleLabel.backgroundColor = UIColor.whiteColor() // ... super.init(style: style, reuseIdentifier: reuseIdentifier) } }但是,首先(在
init内部)执行let whiteColor = UIColor.whiteColor(),然后用whiteColor替换对UIColor.whiteColor()的每个调用会更好吗? 或者,也许在这个例子中,我应该定义一个函数(在
init内),它创建一个UILabel与CGRectZero的frame和backgroundColor的UIColor.whiteColor()和只是调用它来初始化每个标签属性。如果我这样做,will Swift know to optimize (perhaps inline) that function?
【问题讨论】:
-
我认为这两种方式都不会对性能产生有意义的影响。无论在这种特定情况下它具有哪种行为,我认为依赖编译器的实现细节并不是一个好主意
-
@Jiaaro 可能不在这样一个小例子中,但是如果该类提供了非常重要的信息,它可能会更有趣(例如,如果我在战利品中调用此方法超过 100 次,以及一张桌子视图可能有 1000 行)。请记住,swift 处于测试阶段。所以,行为可能会改变。
标签: performance optimization inline swift