ios - 如何完全删除 NSTimer SchedulerWithTimeInterval

标签 ios swift nstimer

我在 NSUserDefaults 中挥动一个时间值,当我重用 ViewController 时,我的 NSTimer 将 +1 添加到 Interval

这里是我的更新函数:

func fireUpdatedLimit() {
        var endTimeSeconds = userDefaults.integerForKey("endTimeSeconds\(currentUserId!)")
        if endTimeSeconds > 0  {
            endTimeSeconds += 1
            userDefaults.setInteger(endTimeSeconds, forKey: "endTimeSeconds\(currentUserId!)")
        }
        self.timer =  NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(ViewController.updateLimit), userInfo: nil, repeats: true)
    }

这是我已经尝试过的:

weak var timer = NSTimer() 
weak var timer: NSTimer?

self.timer = nil 
self.timer.invalidate()

逻辑:

func updateLimit() {

        var timeLeft = userDefaults.integerForKey("endTimeSeconds\(currentUserId!)")
        foregroundAction() {
            self.lockedTimeLabel.hidden = false
            self.lockedImageView.hidden = false
        }
        self.lockedTimeLabel.text = String(fromTimeInterval: Double(timeLeft))
        if timeLeft <= 0 {
            print("ended")
            foregroundAction() {
                self.lockedImageView.hidden = true
                self.lockedTimeLabel.hidden = true
                self.mediaImageView.hidden = true
                self.followerImageView.hidden = true
            }
            self.reloadContent()
            userDefaults.setInteger(timeLeft, forKey: "endTimeSeconds\(currentUserId!)")
            self.timer!.invalidate()
        } else {
            timeLeft -= 1

            userDefaults.setInteger(timeLeft, forKey: "endTimeSeconds\(currentUserId!)")
        }
    }

最佳答案

如果您将计时器设置为nil,那么引用将被破坏并且您无法使它无效,因此您必须先调用invalidate

确保在您要创建新计时器时始终检查引用并使其失效,因为这也会破坏对旧计时器的任何引用。

此外,切勿使用 Timer() 创建虚拟/占位符计时器,您需要一个可选引用 (?)。

关于ios - 如何完全删除 NSTimer SchedulerWithTimeInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37334941/

相关文章:

ios - 哪些限制会阻止我的 UIView 相互堆叠?

ios - 如何使用自动布局设置按钮宽度并针对 iPhone 6 plus 进行调整?

ios - Swift - 在 iOS 中查找 4 位整数的反对数

ios - 如何检测 30 秒持续时间

ios - 使用 Swift 4 和 Firebase 从具有唯一 ID 的多个用户读取位置

ios - NSInvalidArgumentException 与 NSCoding

objective-c - Objective C、UIGestureRecognizer的分配与释放

ios - chartValueSelected 永远不会被调用

ios - 调用停止时 AVAudioPlayer 崩溃

iphone - NSTimer Xcode 警告