我有一个跨Swift,C ++和Objective-C的多线程系统。
我注意到在滚动滚动视图时,UI可能完全陷入僵局。 OpenGL仍在正确渲染和更新,音频线程仍在运行,但我无法与UI进行交互。
仅在滚动滚动视图时才会发生这种情况,尤其是在减速时。
有没有办法更改滚动视图跟踪的runloop模式或解决此问题的其他方法?
我使用Time Profiler进行了分析,以检查线程等待指示符,但我无法确定导致死锁的原因。
编辑:
经过额外测试后,看起来像collectionviews和tableview也会导致死锁。
如何调试?
答案 0 :(得分:0)
对于任何可能遇到同一问题的人。
我有C ++代码调用Swift的完成块。完成块以dispatch_async
高速返回主线程,以便setNeedsDisplay()
触发GLKView
上的渲染更新。
仅在滚动滚动视图时才导致UI死锁。
我使用CADisplayLink
来修复此问题,如果某些属性为真,则只需在setNeedsDisplay()
上调用GLKView
。