如何在Swift中使此DispatchWorkItem无效?

时间:2018-03-23 16:51:15

标签: ios swift grand-central-dispatch dispatchworkitem

我正在制作一个计时器,可以在手机正在录制时更新文本并使用过滤器进行繁重的工作。由于某种原因,工作项似乎没有失效,因为当我回到我的视图时,我有一个额外的计时器更新文本。每次我返回并重新启动它们时都会堆积起来。

        recordedTimeQueue = DispatchWorkItem {
            for i in 1 ..< (600) { // 600 max seconds
                usleep(1000000)
                DispatchQueue.main.async {
                    recordedTime?.text = "\(i)"
                }
            }
        }

        DispatchQueue.global().async(execute: recordedTimeQueue!)

当我停止录制时,不应该抛弃此DispatchWorkItem吗?之后我甚至尝试过它。

        print("recording stopped")

        recordedTimeQueue?.cancel()

我可能有一个猜测是我需要创建一个全局bool,所以我可以选择退出for循环,但我不知道为什么会这样做。

编辑:我认为我得到了它,但我不知道它在技术上是否正确:

        recordedTimeQueue = DispatchWorkItem {
            for i in 1 ..< (600) { // 600 max seconds
                if(recordedTimeQueue?.isCancelled)! { break }
                usleep(1000000)
                DispatchQueue.main.async {
                    recordedTime?.text = "\(i)"
                }
            }
        }

0 个答案:

没有答案