栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在块外而不是在块内设置时,`scheduledTimer`会正确启动?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在块外而不是在块内设置时,`scheduledTimer`会正确启动?

问题在于所讨论的完成块可能未在主线程上运行,因此没有运行循环。但是计时器需要在运行循环中进行调度,而主线程只有一个,而大多数后台线程则没有(除非您自己添加一个)。

为了解决这个问题,在该完成处理程序中,将计时器的创建分派回主线程,并且应该可以正常工作:

DispatchQueue.main.async {    self.timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(handleTimer(_:)), userInfo: nil, repeats: true)}

或使用调度源计时器(可以为后台队列安排的计时器,并且不需要运行循环)。

var timer: DispatchSourceTimer!private func startTimer() {    let queue = DispatchQueue(label: "com.domain.app.timer")    timer = DispatchSource.makeTimerSource(queue: queue)    timer.setEventHandler { [weak self] in        // do something    }    timer.schedule(deadline: .now(), repeating: 1.0)    timer.resume()}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426957.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号