当UI滚动时,App停止从套接字接收数据

时间:2011-10-12 12:47:06

标签: objective-c ios multithreading cocoa-touch nsrunloop

我有一个使用UDP套接字接收数据的iPad应用。它有一个UIWebView来浏览网页。 但是在UIWebView中进行滚动时,所有内容都会冻结,并且不会收到任何数据。 我一直在搜索,它与runloops和线程有关。但是如果UIWebView无法在主要的其他线程中运行,那么在滚动时如何接收数据呢?保持接收数据至关重要。

该项目使用Cocoa AsyncSocket中的AsyncUdpSocket类,该类运行良好。还有来自Matt Gallagher的单身人士课程。一切都在主线程,UDP接收和UI中运行。

提前致谢!

1 个答案:

答案 0 :(得分:1)

进行滚动时,runloop进入另一种模式(UITrackingRunLoopMode)并停止响应主线程上的网络活动。这是出于性能原因而完成的。

您应该能够在正确的runloop模式下安排这些更新(我相信UITrackingRunLoopMode)。虽然,我不建议这样做。

相反,尝试在另一个线程(或队列,yay GCD!)上设置UDP网络代码,并在主线程上安排回调以更新UI。这将保证网络线程在将数据恢复到套接字时具有正确的runloop模式。