使用NSTimer后,永远不会调用类deinit方法。 该类是用Swift编写的,我在" init"中调用了计时器。像这样:
init(eventsDistributor : EventsDistributor, orderSide : ORDER_SIDE, stockViewModel : StockViewModel, orderType : ORDER_TYPE_ENUM, orderPrice : NSNumber) {
self.eventsDistributor = eventsDistributor
self.orderSide = orderSide
self.stockViewModel = stockViewModel
self.orderType = orderType
self.orderPrice = orderPrice
super.init()
_events()
loadPreOrderDetails()
//Here I call the Timer:
var reloadTimer = NSTimer.scheduledTimerWithTimeInterval(10.0, target: self, selector: "loadSecurityTradeInfo", userInfo: nil, repeats: true)
reloadTimer.fire()
}
我尝试使用NSTimer
作为本地变量,但没有成功......
有谁遇到这个问题?是否有一个我可以在Swift中使用的计时器,它不会导致该类不被释放?感谢
答案 0 :(得分:5)
计时器具有对其目标(自身)的强引用。并且目标被安排到运行循环,该循环保持对它的强引用,直到计时器失效。在使计时器无效(reloadTimer.invalidate,或者可能来自loadSecurityTradeInfo方法)之前,该对象不会消失。
这实际上非常好,因为在对象消失后,向对象发送loadSecurityTradeInfo消息的计时器将是一个非常非常糟糕的主意。
loadSecurityTradeInfo可能应该更改为将计时器作为参数的方法,因此它可以使其无效。
答案 1 :(得分:2)
NSTimer保留其目标。没有惊喜。您需要先使计时器无效