如何循环 despatch_after
How to loop despatch_after
我想循环 dispatch_after 以循环显示这样的图像:
while isRunning {
let delay = Int64(Double(NSEC_PER_SEC) * settings.delay)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay), dispatch_get_main_queue(), {
dispatch_async(dispatch_get_main_queue(), {
self.showNextImage()
})
})
}
它应该每 delay
秒调用一次 showNextImage
。但它陷入无限循环而不显示图像。我不知道如何解决这个问题。感谢任何帮助。
Loop 正在调度无限 dispatch_after 因为 isRunning 是并且 loop 没有等待,最好放一些计数 (i<10) 或使用 NSTimer 到特定条件然后失效。
if (self.stimerShowNextImage.isValid) {
[self.stimerShowNextImage invalidate];
self.stimerShowNextImage = nil;
}
self.stimerShowNextImage = [NSTimer scheduledTimerWithTimeInterval: 5
target: self
selector: @selector(showNextImage)
userInfo: nil
repeats: YES];
上面是延迟 5 秒的 timerCode,在 ViewWillDisapper 中你需要使它无效,而且在安排定时器之前你需要检查它是否已经 运行。
查看您的代码 dispatch_after 已经 运行 在主线程中。再次在主线程中使用。我的意思是不需要。
当需要时意味着如果你在外部使用主线程以外的其他线程,并且在你使用 uielements 之后,那个时候在内部使用主线程。
我想循环 dispatch_after 以循环显示这样的图像:
while isRunning {
let delay = Int64(Double(NSEC_PER_SEC) * settings.delay)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay), dispatch_get_main_queue(), {
dispatch_async(dispatch_get_main_queue(), {
self.showNextImage()
})
})
}
它应该每 delay
秒调用一次 showNextImage
。但它陷入无限循环而不显示图像。我不知道如何解决这个问题。感谢任何帮助。
Loop 正在调度无限 dispatch_after 因为 isRunning 是并且 loop 没有等待,最好放一些计数 (i<10) 或使用 NSTimer 到特定条件然后失效。
if (self.stimerShowNextImage.isValid) {
[self.stimerShowNextImage invalidate];
self.stimerShowNextImage = nil;
}
self.stimerShowNextImage = [NSTimer scheduledTimerWithTimeInterval: 5
target: self
selector: @selector(showNextImage)
userInfo: nil
repeats: YES];
上面是延迟 5 秒的 timerCode,在 ViewWillDisapper 中你需要使它无效,而且在安排定时器之前你需要检查它是否已经 运行。
查看您的代码 dispatch_after 已经 运行 在主线程中。再次在主线程中使用。我的意思是不需要。 当需要时意味着如果你在外部使用主线程以外的其他线程,并且在你使用 uielements 之后,那个时候在内部使用主线程。