deinit无法调用该函数

时间:2016-05-31 07:08:29

标签: ios swift nstimer

我想使用deinit版本NSTimer,但它无法正常工作。我想知道如何使用deinit

代码:

class timerView: NSObject {
    var timer:NSTimer?
    override init() {
        super.init()
        self.timer = NSTimer(fireDate: NSDate(), interval: 1, target: self, selector: "timers", userInfo: nil, repeats: true)
        NSRunLoop.currentRunLoop().addTimer(self.timer!, forMode: NSDefaultRunLoopMode)
    }
    deinit{
        self.timer = nil
    }

    func timers() -> Void {
        print("true")
    }
}

    var timeV:timerView?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.timeV = timerView()
        self.timeV = nil
}

1 个答案:

答案 0 :(得分:1)

您可以使计时器无效:

timer.invalidate()

来自NSTimer Class Reference

  

...立即使计时器失效   禁用它以便它不再影响运行循环。运行循环   然后删除计时器(以及它对计时器的强引用),   在invalidate方法返回之前或稍后返回   点。一旦失效,就不能重复使用计时器对象。

这正是您在致电dinit时尝试做的事情。

**由于答案不尽如人意,我可以尝试猜测你的问题:你在课堂上创建了计时器,但可能试图从程序中的不同位置使计时器无效。但是因为这样做不会起作用:

  

你应该总是从安装了计时器的同一个线程中调用invalidate方法。

这种情况的一种可能解决方案是将计时器保存在自己的struct中:

struct programTimer {
  static var timer: NSTimer = NSTimer()
 }