3

我有一个使用 UDP 套接字接收数据的 iPad 应用程序。它有一个 UIWebView 来浏览网页。但是在 UIWebView 中滚动时,一切都冻结了,没有收到任何数据。我一直在寻找,它与运行循环和线程有关。但是如果 UIWebView 不能在主线程以外的另一个线程中运行,我如何在滚动时接收数据?保持接收数据至关重要。

该项目使用来自Cocoa AsyncSocket的 AsyncUdpSocket 类,效果很好。还有来自Matt Gallagher的单例类。一切都在主线程、UDP 接收和 UI 中运行。

提前致谢!

4

1 回答 1

1

当您进行滚动时,runloop 进入不同的模式 ( UITrackingRunLoopMode) 并停止响应主线程上的网络活动。这样做是出于性能原因。

您应该能够在正确的运行循环模式下安排这些更新(UITrackingRunLoopMode我相信)。虽然,我不会推荐这个。

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

于 2011-11-11T04:53:22.713 回答