分配NSTimer时不会调用Deinit

时间:2015-12-31 20:16:02

标签: ios swift nstimer

这就是我在UIViewController的子类中声明属性的方法:

private weak var timer: NSTimer?

这就是我在viewDidLoad()中所做的事情:

timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTimer", userInfo: nil, repeats: true)

这是我的deinit

deinit {
    timer?.invalidate()
    timer = nil
}

因为NSTimer而未调用Deinit。不要搞笑说在NSTimer里面有一个强烈的引用我的控制器:)我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我认为@i_am_jorf给了你一个好方向。如果你看一下无效方法的the documentation,你会找到一个完整的解释,为什么它就像那样

  

此方法是从NSRunLoop对象中删除计时器的唯一方法。 NSRunLoop对象在invalidate方法返回之前或之后的某个时间点删除其对计时器的强引用。

     

如果配置了目标和用户信息对象,接收者也会删除对这些对象的强引用。

所以是的,如果在适当的时刻没有调用无效,则保留周期