我想使用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
}
答案 0 :(得分:1)
您可以使计时器无效:
timer.invalidate()
...立即使计时器失效 禁用它以便它不再影响运行循环。运行循环 然后删除计时器(以及它对计时器的强引用), 在invalidate方法返回之前或稍后返回 点。一旦失效,就不能重复使用计时器对象。
这正是您在致电dinit时尝试做的事情。
**由于答案不尽如人意,我可以尝试猜测你的问题:你在课堂上创建了计时器,但可能试图从程序中的不同位置使计时器无效。但是因为这样做不会起作用:
你应该总是从安装了计时器的同一个线程中调用invalidate方法。
这种情况的一种可能解决方案是将计时器保存在自己的struct
中:
struct programTimer {
static var timer: NSTimer = NSTimer()
}