- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在网上和文档中都找不到任何直接的答案。如果我使用以下内容设置 CADisplayLink
:
let displayLink = CADisplayLink(target: self, selector: #selector(updateShimmer))
displayLink.add(to: .current, forMode: .common)
@objc func updateShimmer() {
print(Thread.isMainThread)
}
我说真的。我知道我可以将它包装在 DispatchQueue.main
中,但我想知道,它是否总是在主队列上调度?还是我应该把它包起来?
最佳答案
您不需要手动将显示链接处理程序中的代码分派(dispatch)到主线程。添加到特定运行循环的计时器和显示链接将始终在与该运行循环关联的线程上运行。有关详细信息,请参阅 Threading Programming Guide: Run Loops .
最重要的是,如果您add(to:forMode:)
到主运行循环,则主运行循环始终在主线程上运行。
话虽如此,如果你想确保它始终在主线程上运行,我建议明确并将其添加到 .main
,而不仅仅是 .current
。这消除了任何歧义:
let displayLink = CADisplayLink(target: self, selector: #selector(updateShimmer(_:)))
displayLink.add(to: .main, forMode: .common)
请注意,我还调整了 updateShimmer
的签名以接受参数。显示链接将传递给它。在方法中包含该引用通常很有用。而且,无论如何,它使一个人的代码更加不言自明:您现在只需看一眼这个方法就可以理解这是一个显示链接处理程序:
@objc func updateShimmer(_ displayLink: CADisplayLink) {
...
}
关于ios - CADisplayLink 回调是否总是在主线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57322965/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!