滚动视图滚动导致UI死锁。改变runloop模式?

时间:2016-09-01 14:30:45

标签: ios uiscrollview

我有一个跨Swift,C ++和Objective-C的多线程系统。

我注意到在滚动滚动视图时,UI可能完全陷入僵局。 OpenGL仍在正确渲染和更新,音频线程仍在运行,但我无法与UI进行交互。

仅在滚动滚动视图时才会发生这种情况,尤其是在减速时。

有没有办法更改滚动视图跟踪的runloop模式或解决此问题的其他方法?

我使用Time Profiler进行了分析,以检查线程等待指示符,但我无法确定导致死锁的原因。

  

编辑:

经过额外测试后,看起来像collectionviews和tableview也会导致死锁。

如何调试?

1 个答案:

答案 0 :(得分:0)

对于任何可能遇到同一问题的人。

我有C ++代码调用Swift的完成块。完成块以dispatch_async高速返回主线程,以便setNeedsDisplay()触发GLKView上的渲染更新。

仅在滚动滚动视图时才导致UI死锁。

我使用CADisplayLink来修复此问题,如果某些属性为真,则只需在setNeedsDisplay()上调用GLKView