1

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 で使用できるタイマーはありますか? ありがとう

4

2 に答える 2

5

タイマーには、そのターゲット (自己) への強い参照があります。そして、ターゲットは実行ループにスケジュールされ、タイマーが無効になるまで強い参照を保持します。タイマーを無効にする (reloadTimer.invalidate、またはおそらく loadSecurityTradeInfo メソッド内から) まで、オブジェクトは消えません。

オブジェクトがなくなった後に loadSecurityTradeInfo メッセージをオブジェクトに送信するタイマーは非常に悪い考えになるため、これは実際には非常に良いことです。

loadSecurityTradeInfo はおそらく、タイマーを引数として取るメソッドに変更して、無効化できるようにする必要があります。

于 2015-06-10T13:15:25.020 に答える