我向类中添加了一个计时器变量,并使用它的didSet观察者使旧值无效。
var timer: Timer? {
didSet { oldValue?.invalidate() }
}
deinit {
timer = nil
}我认为当类被重新初始化时,这就足以使计时器失效,但是看起来没有调用didSet。为什么会这样呢?观察者在去初始化期间不工作吗?
发布于 2018-10-15 18:08:31
让我们把答案放在这里,这样我们就可以结束这个问题了。
deinit期间,属性观察者显然没有运行。这似乎与属性观察者在init期间不运行的事实类似,但与后者不同的是,前者似乎在任何地方都没有明确的文档记录。deinit期间调用该方法。补充说明:当使用计时器时,注意内存管理问题!您可以轻松地让自己陷入从未被调用过deinit的情况,因为您保留了计时器,但定时器却在保留您。然后,您将无法使计时器失效,您的整个视图控制器将泄漏。你的问题中没有抱怨这一点,但这是一个相关的问题,所以我想我最好提醒它。
https://stackoverflow.com/questions/52820629
复制相似问题