【问题标题】:Swift Performance迅速的表现
【发布时间】:2014-06-16 13:39:38
【问题描述】:
  1. Swift 编译器是否足够聪明,可以优化掉返回相同对象的多个重复方法调用?或者,我应该先将返回值分配给一个常量,然后再使用它吗?

  2. 例如:

    Table View Programming Guide for iOS 表示在向UITableViewCellcontentView 添加子视图时,请避免使它们透明。 “由于合成成本增加,透明子视图会影响滚动性能。”

    所以,我经常做以下事情:

    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() 的每个调用会更好吗?

  3. 或者,也许在这个例子中,我应该定义一个函数(在 init 内),它创建一个 UILabelCGRectZeroframebackgroundColorUIColor.whiteColor() 和只是调用它来初始化每个标签属性。如果我这样做,will Swift know to optimize (perhaps inline) that function?

【问题讨论】:

  • 我认为这两种方式都不会对性能产生有意义的影响。无论在这种特定情况下它具有哪种行为,我认为依赖编译器的实现细节并不是一个好主意
  • @Jiaaro 可能不在这样一个小例子中,但是如果该类提供了非常重要的信息,它可能会更有趣(例如,如果我在战利品中调用此方法超过 100 次,以及一张桌子视图可能有 1000 行)。请记住,swift 处于测试阶段。所以,行为可能会改变。

标签: performance optimization inline swift


【解决方案1】:

使用 swiftc -help 有很多选项,使用 -emit-xxxx 可以详细查看生成的作业

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 2019-12-18
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2019-01-12
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多