我有一个调度队列,它必须无限运行。所以我试图让它在一个do while循环,使线程连续运行,但当我试图这样做,我得到一个空白屏幕。下面是代码:
var i = 1 do{ dispatch.main(3) { self.myfunction() } i+=1 }while(i>0)
我不明白,为什么会发生这种情况?还有,如何每隔几秒钟就能得到一个调度电话?
zqdjd7g91#
这是一个NSTimer的扩展,来自EZSwiftExtensions。
NSTimer
extension NSTimer { public static func runThisEvery(seconds seconds: NSTimeInterval, handler: NSTimer! -> Void) -> NSTimer { let fireDate = CFAbsoluteTimeGetCurrent() let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, seconds, 0, 0, handler) CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes) return timer } }
代码的作用很容易理解。创建一个run循环计时器,将其添加到run循环中,这样它就可以实际运行并触发,并返回该示例,以便稍后可以停止它。
let timer = NSTimer.runThisEvery(seconds: 3) { _ in self.myFunction() }
要停止它,只需:
timer.invalidate()
1条答案
按热度按时间zqdjd7g91#
这是一个
NSTimer
的扩展,来自EZSwiftExtensions。代码的作用很容易理解。创建一个run循环计时器,将其添加到run循环中,这样它就可以实际运行并触发,并返回该示例,以便稍后可以停止它。
要停止它,只需: