У меня есть UIViewController
, который имеет ссылку на Timer
объект, который неоднократно вызывает замыкание.Объект Timer
захватывает self
в своем блоке.Насколько я понимаю, это приводит к retains cycle
между контроллером вида и блоком.Существует логика для установки таймера на ноль, и затем цикл сохранения прерывается, но он может не выполняться.
У меня следующий вопрос: View Controller будет существовать столько, сколько длится приложение (по крайней мере, в текущей реализации).В этом случае - как мне лучше всего позаботиться об этом цикле сохранения?Должен ли я игнорировать это, поскольку контроллер View не будет выпущен в любом случае.Должен ли я рассмотреть возможные будущие изменения и обработать их с помощью ссылок unowned
или weak
и какой.Я предполагаю, что это должно быть unowned
, поскольку таймер удерживается только контроллером представления, и его следует разблокировать после освобождения контроллера представления, но не уверен, что я что-то упустил.Заранее спасибо.Следующий код является простым примером того, о чем я говорю.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")
}
}