我有一个对重复调用闭包的对象UIViewController
的引用。对象在其块中Timer
捕获Timer
。self
据我了解,这导致retains cycle
了视图控制器和块之间的关系。有一个逻辑是把定时器设置为nil,然后retain cycle被打破,但它可能不会被执行。
我的问题如下:只要应用程序存在,视图控制器就会存在(至少在当前实现中)。在这种情况下 - 我应该如何最好地处理这个保留周期?我应该忽略它,因为无论如何都不会释放视图控制器。我是否应该考虑未来可能发生的变化并使用unowned
或weak
参考以及哪一个来处理它。我想应该是unowned
因为计时器仅由 View Controller 保留,并且一旦 View Controller 释放就应该释放它,但不确定我是否遗漏了什么。先感谢您。以下代码是我正在谈论的简单示例。Class A
是视图控制器。
class A {
var timer: Timer? = nil
var varToReference: Int = 0
func startTimer() {
timer = Timer.scheduledTimer(withTimeInterval: 2, repeats: true, block: { (theTimer) in
self.varToReference += 1
})
}
func stopTimer() {
if let theTimer = timer {
theTimer.invalidate()
timer = nil
}
}
func onAdapterStarts() {
self.startTimer()
}
func onAdapterStops(){
self.stopTimer()
}
deinit {
print("A Deinit")
}
}