调试与测试

Debug

执行时间

let start = CACurrentMediaTime()

// ...

let end = CACurrentMediaTime()

print("测量时间:\(end - start)")

为了方便使用,我们还可以将这段代码封装到一个方法中,这样我们就能在项目中需要测试性能的地方方便地使用它了:

func measure(f: ()->()) {
    let start = CACurrentMediaTime()
    f()
    let end = CACurrentMediaTime()
    print("测量时间:\(end - start)")
}


measure {
    doSomeHeavyWork()
}

CACurrentMediaTime 和 log 的方法适合于我们对既有代码进行探索,另一种有效的方法是使用 Instruments 的 Time Profiler 来在更高层面寻找代码的性能弱点。将程序挂载到 Time Profiler 后,每一个方法调用的耗时都将被记录。 当我们寻找到需要进行优化的代码路径后,为其建立一个单元测试来持续地检测代码的性能是很好的做法。在 Xcode 中默认的测试框架 XCTest 提供了检测并汇报性能的方法:measureBlock。通过将测试的代码块放到 measureBlock 中,Xcode 在测试时就会多次运行这段代码,并统计平均耗时。更方便的是,你可以设定一个基准,Xcode 会记录每次的耗时并在性能没有达到预期时进行提醒。这保证了随着项目开发,关键的代码路径不会发生性能上的退化。

func testPerformance() {
    measureBlock() {
        // 需要性能测试的代码
    }
}

上一页
下一页