如何循环 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 之后,那个时候在内部使用主线程。