【发布时间】:2018-09-05 00:59:08
【问题描述】:
添加子视图时,视图控制器似乎泄漏。
为什么下面会打印'What'
import UIKit
final class ViewController: UIViewController {
private lazy var mySwitch: UISwitch = {
let mySwitch = UISwitch()
mySwitch.tintColor = .blue
return mySwitch
}()
func setup() {
view.addSubview(mySwitch)
}
@objc func switchChangedState() {
}
deinit {
print("what")
}
}
var controller: ViewController? = ViewController()
controller = nil
但以下没有
var controller: ViewController? = ViewController()
controller?.setup()
controller = nil
编辑:添加 GIF
Xcode 版本 9.4.1 (9F2000)
【问题讨论】:
-
为什么是最终的?
-
嗨@TomSchulz。我出于习惯写final。在此特定示例中,不需要它。话虽如此,作为一种习惯,我还是建议您添加 final,直到您准备好支持子类化。
-
不同意。无论如何,您都不能发布头文件和库。如果有人希望事情不是最终的,他们只需编辑您的代码。 '支持子类化';该语言支持子类化。
-
@TomSchulz 我不明白你所说的“发送头文件和库”或“只编辑你的代码”是什么意思。
-
@TomShulz 如果您还没有准备好支持子类化,我建议添加 final。当然,你和其他人可以在未来改变这种想法。当您准备子类化时更改它。此外,添加final是性能的提升。 developer.apple.com/swift/blog/?id=27
标签: ios memory-leaks