我有一个计算属性,可以进行零检查。
var _textSize: CGSize?
var textSize: CGSize {
get {
if _textSize == nil {
// compute _textSize
}
return _textSize
}
}
在乐器中进行分析时,== nil
检查显示为:
我相信static == infix<A where ...> (A?, A?) -> Bool
是零检查。是这种情况,如果是这样,那么零检查是否昂贵?
答案 0 :(得分:4)
正确的答案实际上取决于你对“昂贵”的意思。
但是,恕我直言,检查某个值是否为nil
不是一项昂贵的操作。
它在时间O(1)
执行,因此它是一个恒定的时间,并且不会根据其他值增长。
最后,这对CPU来说非常简单。
如果计算属性确实属于Class
或Struct
,我认为存在差异(就所需时间而言)。
<强>类强>
在第一种情况下(Class
),操作系统需要从Heap
类的实例中检索,然后检查属性是否为nil
。 Heap
位于RAM上,速度很快(但不是设备上最快的内存)。
<强> STRUCT 强>
另一方面,如果我们使用的是Struct
,则有关计算属性的数据可在Stack
上获得,如果比Heap
更快。
所以,最后:
Class
的计算属性是nil
快 Struct
的计算属性是nil
是否非常快