[英]iOS: How to invalidate or kill every timer in activity in swift 3?
我想在我的應用程序中停止每個計時器。 問題是我把啟動Web服務的計時器,即使我把一些無效,似乎當我關閉ViewController時,Timer仍處於活動狀態。 我可以很容易地檢查是否存在問題,因為當我打印_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函數永遠不會停止並且每次都會啟動,包括我選擇的所有日期,即使使用invalidate也是如此。
一個明顯的評論:刪除fileprivate屬性。 只保留
var _refreshTimer:Timer?
您可以在Swift3中獲得有關private / fileprivate的一些信息: https ://cocoacasts.com/what-is-the-difference-between-private-and-fileprivate-in-swift-3/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.