ios - 如何循环 despatch_after

标签 ios swift grand-central-dispatch

我想循环 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 是 yes 并且 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 中你需要使它失效,另外在安排定时器之前你需要检查它是否已经运行。

关于ios - 如何循环 despatch_after,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758711/

相关文章:

ios - 从原型(prototype) uicollectionviewcell 内的文本字段获取数据

ios - 基于 UITableview 单元格选择和取消选择,快速添加和删除项目到数组中

ios - tapGesture 超链接 swift

ios - dispatch_after 和 [UIView 动画 : duration] happen immediately (but shouldn't)

iphone - 为什么主队列上的 GCD dispatch_async 会导致后台队列死锁?

ios - 将任务分派(dispatch)到队列中以便在另一个线程中运行任务

ios - 以前看不见的Facebook登录提示。更改为SDK?

ios - 使用 iMessage 应用程序发送 URL

ios - 在多点连接中邀请对等点时偶尔发生崩溃

ios - 为什么我的 UITableView 'Tap to Edit' 功能慢?