2011-10-12 20 views
3

我有一个使用UDP套接字接收数据的iPad应用程序。它有一个UIWebView来浏览网页。 但在UIWebView中进行滚动时,一切都冻结,并且没有收到数据。 我一直在寻找,它与runloops和线程有关。但是,如果UIWebView无法在除主窗口之外的其他线程中运行,那么在滚动时如何接收数据?保持接收数据至关重要。当用户界面滚动时,应用程序停止从套接字接收数据

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

在此先感谢!

+0

你需要多说一下你如何处理UDP。我推荐使用AsyncSocket(它可以实现TCP和UDP)。 – jbat100

+0

听起来像你在主线程上等待UDP数据包,阻塞了UI。 – jbat100

+0

我使用Cocoa AsyncSocket的[**] AsyncUdpSocket **类[链接](http://code.google.com/p/cocoaasyncsocket/),效果很好。还有Matt Gallagher的单人班[link](http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html)。我已经在主线程,UDP接收和用户界面中运行了一切。 – queteparece

回答

1

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

你应该能够安排适当的runloop模式的这些更新(我相信UITrackingRunLoopMode)。虽然,我不会推荐这个。

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

相关问题