gpt4 book ai didi

ios - 来自 Performance Wise : Class Computed Property vs Stored Property

转载 作者:搜寻专家 更新时间:2023-11-01 05:38:12 26 4
gpt4 key购买 nike

所以,我有这种情况,其中 var3 的值取决于 var1var2。基本上,这可以转化为两种形式:

A) 为 var3 使用计算属性

class bla {
var var1: Int = 0
var var2: Int = 0
var var3: Int {
return var1 * var2
}
}

B) 将存储属性与 var1 和 var2 的属性观察器一起使用

class bla {
var var1: Int = 0 {
didSet {
var3 = var1 * var2
}
}
var var2: Int = 0 {
didSet {
var3 = var1 * var2
}
}
var var3: Int = 0
}

但是,在我必须处理这个的情况下,变量是在 UITableViewCell 中使用的巨大模型对象的所有部分。在这种情况下使用,它确实需要尽可能高效,这就是我试图避免在这种情况下使用计算属性的原因。据我所知,当 Swift 在 下获取 var3 的值时A 类实现,它将即时计算其值,而不是像B 类实现 那样将其缓存起来。正确的? (Swift 是否以任何方式缓存计算属性的值?)

现在我真的很想知道应该采用哪种最佳方法。事实上,我将其中一些变量迁移到模型对象中而不是在单元格内即时计算它们的全部意义在于减轻单元格的负载并获得尽可能平滑的滚动,这表明使用计算属性让我的努力变得毫无意义。另一方面,我遇到了其中一个变量依赖于 3~4 个其他变量的情况,这使得当每个值发生变化时都必须重新计算它,我猜这也是低效的。

有什么建议吗?我做错了吗?

最佳答案

这是我目前使用的方法,它需要在某个时候计算实例属性并缓存以供后续访问:

class AClassWithCachedInstanceVariables {

private var _var1: Var1Type?

var var1: Var1Type {
if let var1 = self._var1 {
// cache hit
return var1
} else {
// cache miss
let var1 = self.getVar1()
self._var1 = var1
return var1
}
}


private var _var2: Var2Type?

var var2: Var2Type {
if let var2 = self._var2 {
// cache hit
return var2
} else {
// cache miss
let var2 = self.getVar2()
self._var2 = var2
return var2
}
}


/* Extra: let’s say we also want to require var1 and var2
to be recomputed whenever this other variable is changed */
var otherVar: OtherVarType? {
didSet(oldOtherVar) {
if otherVar != oldOtherVar {
self._var1 = nil
self._var2 = nil
}
}
}

private func getVar1() -> Var1Type {
// compute stuff...
return Var1Type()
}

private func getVar2() -> Var2Type {
// compute stuff...
return Var2Type()
}
}

关于ios - 来自 Performance Wise : Class Computed Property vs Stored Property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com