在异步后台线程上运行 CADisplayLink 的正确方法?
Posted
技术标签:
【中文标题】在异步后台线程上运行 CADisplayLink 的正确方法?【英文标题】:Proper way to run CADisplayLink on async background thread? 【发布时间】:2021-07-24 03:00:28 【问题描述】:让CADisplayLink
回调函数在后台线程上运行的正确方法是什么?我正在创建显示链接:
let displayLink = CADisplayLink(target: self, selector: #selector(self.renderBackground))
if let displayLink = displayLink
displayLink.preferredFramesPerSecond = 30
DispatchQueue.main.async
displayLink.add(to: .current, forMode: .common)
这可行,但是当我向 renderBackground 函数添加断点时,它显示它位于主线程上:
它似乎在主线程上?
【问题讨论】:
【参考方案1】:CADisplayLink
旨在提供与屏幕刷新同步的回调,这发生在主线程上。将主线程上发生的事件与另一个线程上的调用同步是没有意义的。
我怀疑没有办法做到这一点。
【讨论】:
我希望它在屏幕更新时触发,但一旦触发就在后台执行。似乎有可能,或者为什么 CADisplayLink 有线程选项?以上是关于在异步后台线程上运行 CADisplayLink 的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章
在后台运行长时间运行的并行任务,同时允许小型异步任务更新前台