Giz*_*odo 0 var lazy-loading let ios swift
在阅读了Swift的懒惰变量之后,我有以下问题:
class MainViewController: UIViewController {
lazy var heavyClass = HeavyClass()
func buttonPressed () {
//Use heavyClass here
self.heavyClass.doStuff()
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您使用上面的lazy var来优化代码,以便不会立即分配heavyClass.因此,在启动时,这将是最佳的,因为在启动时不会分配heavyClass.
但是,这不会与上面相同吗?
class MainViewController: UIViewController {
var heavyClass : HeavyClass?
func buttonPressed () {
//Use heavyClass here
self.heavyClass = HeavyClass()
self.heavyClass!.doStuff()
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
在您的示例中,结果并不完全相同,具体如下:
单实例化.每次buttonPressed()调用时,HeavyClass都会实例化一个新的.使用lazy关键字时不是这种情况,该关键字仅在首次访问时创建实例.要匹配惰性语义,您必须heavyClass == nil在每次访问之前检查和设置是否.
空性.您必须heavyClass通过可选链接(heavyClass?.doStuff())或强制解包(heavyClass!.doStuff())来解开您每次要使用它的时间.您还可以将变量设置回nil,这在第一个示例中是编译器错误.
懒惰变量的真正胜利是当你有多个使用变量的地方时.我相信你可以在这里发现重复:
func buttonPressed() {
if self.heavyClass == nil {
self.heavyClass = HeavyClass()
}
self.heavyClass?.doStuff()
}
func aDifferentButtonPressed() {
if self.heavyClass == nil {
self.heavyClass = HeavyClass()
}
self.heavyClass?.doSomethingElse()
}
Run Code Online (Sandbox Code Playgroud)
这是使用惰性变量整理的:
func buttonPressed() {
self.heavyClass.doStuff()
}
func aDifferentButtonPressed() {
self.heavyClass.doSomethingElse()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |