【问题标题】:Proper way to run CADisplayLink on async background thread?在异步后台线程上运行 CADisplayLink 的正确方法?
【发布时间】: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 函数添加断点时,它显示它位于主线程上:

它似乎在主线程上?

【问题讨论】:

    标签: ios swift asynchronous cadisplaylink


    【解决方案1】:

    CADisplayLink 旨在提供与屏幕刷新同步的回调,这发生在主线程上。将主线程上发生的事件与另一个线程上的调用同步是没有意义的。

    我怀疑没有办法做到这一点。

    【讨论】:

    • 我希望它在屏幕更新时触发,但一旦触发就在后台执行。似乎有可能,或者为什么 CADisplayLink 有线程选项?
    猜你喜欢
    • 1970-01-01
    • 2023-01-14
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多