2011-10-12 19 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模式。

相關問題