我正在制作一个计时器,它会在手机录制并使用过滤器进行一些繁重的工作时更新文本。由于某种原因,工作项似乎没有失效,因为当我回到我的视图时,我有一个额外的计时器来更新文本。每次我回去重新启动它时,这些都会堆积起来。
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)"
}
}
}