jjzjj

asyncAfter

全部标签

swift - DispatchQueue.main.asyncAfter(deadline : . now() + 5.0) 如何在 Swift 3 中工作?

在Swift3中,GCD的语法发生了很大变化。对dispatch_after()的调用现在看起来像这样:DispatchQueue.main.asyncAfter(deadline:.now()+5.0){//dosomething}该代码会在block被调用5秒后调用它。这是如何运作的?文档说deadline参数是dispatch_time_t,它是UInt64的类型别名。我假设它是以纳秒为单位的马赫时间。但是,.now()+delay语法将小数秒添加到值中。DispatchTime.now()不返回UInt64吗?如果是这样,向其添加小数秒应该不起作用。如果有的话,我希望添加到.n

IOS - DispatchQueue.main.asyncAfter(deadline : . now()) 和 perform(_:with:afterDelay:) 之间的区别,延迟为 0

我意识到使用DispatchQueue.main.asyncAfter(deadline:.now())和perform(_:with:afterDelay:0)是有区别的当主队列“忙”时。请注意,在我的情况下,perform(_:with:afterDelay:)是从主队列调用的。看起来DispatchQueue.main.asyncAfter(deadline:.now())在下一个运行循环中立即执行任务而不关心主队列但是perform(_:with:afterDelay:)0延迟将等待并仅在主队列“空闲”时执行任务(可能不会在下一个运行循环中调用)。根据Apple文档perfor

swift - 我应该使用未命名的 Timer 还是 Dispatch asyncAfter 来延迟 1 次?

我可以通过两种方式延迟某些事情(也许还有更多方式):funcdelay(delay:Double,closure:@escaping()->()){DispatchQueue.main.asyncAfter(deadline:DispatchTime.now()+Double(Int64(delay*Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC),execute:closure)}//way1:delay(delay:1.0,closure:{})//way2:_=Timer.scheduledTimer(withTimeInterval:1.0

swift - 如何取消 DispatchQueue.main.asyncAfter(deadline : time) in Swift3?

这个问题在这里已经有了答案:CancelatimedeventinSwift?(7个答案)关闭5年前。描述:我目前正在使用以下代码来查看用户是否已停止在搜索栏中键入内容。每次用户在0.5秒后立即开始输入时,我都想取消它。代码:DispatchQueue.main.asyncAfter(deadline:.now()+0.5){//yourfunctionhere}问题:如果用户在Swift3中再次输入,我如何取消DispatchQueue.main.asyncAfter?我尝试过的:我之前尝试过实现:NSObject.cancelPreviousPerformRequests(with

swift - 如何取消 DispatchQueue.main.asyncAfter(deadline : time) in Swift3?

这个问题在这里已经有了答案:CancelatimedeventinSwift?(7个答案)关闭5年前。描述:我目前正在使用以下代码来查看用户是否已停止在搜索栏中键入内容。每次用户在0.5秒后立即开始输入时,我都想取消它。代码:DispatchQueue.main.asyncAfter(deadline:.now()+0.5){//yourfunctionhere}问题:如果用户在Swift3中再次输入,我如何取消DispatchQueue.main.asyncAfter?我尝试过的:我之前尝试过实现:NSObject.cancelPreviousPerformRequests(with

swift - DispatchSourceTimer、Timer 和 asyncAfter 之间的区别?

我很难理解DispatchSourceTimer之间的主要区别,Timer和asyncAfter(在我的例子中,调度一个需要每X秒运行一次的任务,尽管了解定时器的差异可能对有用)(或者除了列出的计时器?)。Timer需要在其启动所在的当前队列上有一个事件的运行循环。DispatchSourceTimer不需要它。Timer防止CPU进入空闲状态。这是否也适用于DispatchSourceTimer/asyncAfter?在什么情况下Timer优于DispatchSourceTimer/asyncAfter?当然还有它们之间的区别?我想在我的应用程序中的私有(private)队列中每15

swift - DispatchSourceTimer、Timer 和 asyncAfter 之间的区别?

我很难理解DispatchSourceTimer之间的主要区别,Timer和asyncAfter(在我的例子中,调度一个需要每X秒运行一次的任务,尽管了解定时器的差异可能对有用)(或者除了列出的计时器?)。Timer需要在其启动所在的当前队列上有一个事件的运行循环。DispatchSourceTimer不需要它。Timer防止CPU进入空闲状态。这是否也适用于DispatchSourceTimer/asyncAfter?在什么情况下Timer优于DispatchSourceTimer/asyncAfter?当然还有它们之间的区别?我想在我的应用程序中的私有(private)队列中每15

ios - DispatchQueue.asyncAfter 没有像我想象的那样工作?

我正在开发一个应用程序,其中我尝试调试的403禁止错误实际上是由您每分钟可以向端点发出的请求数量的上限引起的(愚蠢的我)。很好,我决定将我的网络请求放到DispatchQueue上(无论如何更好的并发设计)并使用asyncAfter(deadline:execute:)函数在每个请求之间造成4秒的延迟。我的程序设计是列表中的每个项目都调用一个函数,在该函数中,一些工作(请求)被放入该调度队列。见下文:classViewControllerletserialQueue=DispatchQueue(label:"networkRequests")funcmyFirstFunc{forite

swift - 当应用程序处于后台/非事件状态时,GCD `asyncAfter` 不启动

我正在使用AVAudioPlayer播放唱片。在每个回放session之间我有0到10秒的间隔。为了制作这个间隔,我正在使用AVAudioPlayerDelegate并且播放完成后我将在延迟后开始新的播放:funcaudioPlayerDidFinishPlaying(_player:AVAudioPlayer,successfullyflag:Bool){guardletsession=playbackSessionId,letaudioTrack=audioTrack,letfailureHandler=playingFailure,letsuccessHandler=playin

ios - 如何在 Swift 中退出 "DispatchQueue.main.asyncAfter"

我想在调用deinit时退出“DispatchQueue.main.asyncAfter”。subView.swiftDispatchQueue.main.asyncAfter(deadline:.now()+5.0){self.doSomething()}funcdoSomething(){ifself.subView.flgA==false{//errorbecausesubView'sdeinitisalreadycalled//...}}当ViewController执行_=self.navigationController?.popViewController(animate
12