iOS: 如何在swift 3 中使activity 中的每个计时器失效或终止?

iOS: How to invalidate or kill every timer in activity in swift 3?

我想停止我应用程序中的所有计时器。问题是我放置了启动 Web 服务的计时器,即使我放置了一些无效,似乎当我关闭 ViewController 时,计时器仍在 activity。我可以很容易地检查是否存在问题,因为当我打印 _currentDate 时,我可以看到有几个 currentDate 正在启动,我只需要看到一个 currentDate(我在标签中选择的那个)。

可能是因为定时器的重新初始化是从 DispatchQueue.main.async 启动的?那么我该如何阻止呢?

fileprivate var _refreshTimer:Timer?

func reinitTimer()
{
    stopTimer()

    if _refreshTimer == nil {
    _refreshTimer = Timer.scheduledTimer(timeInterval: TimeInterval(TIMER_PLANNING_REFRESH), target: self, selector: #selector(PlanningViewController.reloadDataTick(_:)), userInfo: nil, repeats: false)
    }
}

func stopTimer()
{
    if _refreshTimer != nil {
    _refreshTimer!.invalidate()
    _refreshTimer = nil
    }
}

func reloadDataTick(_ timer:Timer)
{
    // WebService launching with the current date that is choosen in a label with popover.

    DAL.sharedInstance.getPlanningInformation(_currentDate) { (models, error) -> Void in

            DispatchQueue.main.async {
                if error == nil
                {
                   ...

                   self.reinitTimer()
                }
           }

       }

为了恢复我的问题,reloadDataTick 函数永远不会停止,并且每次都会启动,包括我选择的所有日期,即使是无效的。

一个明显的评论:删除 fileprivate 属性。只保留

 var _refreshTimer:Timer? 

关于Swift3中的private / fileprivate,你可以得到一些信息: https://cocoacasts.com/what-is-the-difference-between-private-and-fileprivate-in-swift-3/