Swift 无检查性能

Swift nil check performance

我有一个计算的 属性 执行零检查。

var _textSize: CGSize?
var textSize: CGSize {
    get {
        if _textSize == nil {
            // compute _textSize
        }
        return _textSize
    }
}

在 Instruments 中进行分析时,== nil 检查显示为:

我认为 static == infix<A where ...> (A?, A?) -> Bool 是 nil 检查。是这样吗?如果是这样的话,nil checks 会很贵吗?

正确答案取决于您对 "expensive" 的理解。

我的观点

但是,恕我直言,检查值是否为 nil 不是 昂贵的操作。

它在时间 O(1) 中执行,因此它是一个常数时间,不会根据其他值增长。 最后,对于 CPU.

这是一个非常简单的操作

Class 与结构

我想如果计算出的 属性 确实属于 ClassStruct

则存在差异(就所需时间而言)

Class

在第一种情况下 (Class) OS 需要从 Heap 中检索 class 的实例,然后检查 属性 是 nilHeap 位于快速的 RAM 上(但不是设备上最快的内存)。

结构

另一方面,如果我们使用 Struct,有关计算的 属性 的数据可在 Stack 上获得,如果比 Heap 更快。

总结

所以,总而言之:

  1. 检查 Class 的计算 属性 是否 nilfast
  2. 检查 Struct 的计算 属性 是否 nil 非常快