3

UDP ソケットを使用してデータを受信する iPad アプリがあります。また、Web ページを閲覧するための UIWebView があります。しかし、UIWebView でスクロールしている間、すべてがフリーズし、データが受信されません。私は検索してきましたが、それはランループとスレッドに関係しています。しかし、UIWebView がメイン スレッド以外の別のスレッドで実行できない場合、スクロール中にデータを受信するにはどうすればよいでしょうか? データを受信し続けることが重要です。

このプロジェクトでは、非常にうまく機能するCocoa AsyncSocketの AsyncUdpSocket クラスを使用しています。また、Matt Gallagherの singleton クラスもあります。すべてがメイン スレッド、UDP 受信、および UI で実行されます。

前もって感謝します!

4

1 に答える 1

1

スクロールを実行すると、runloopは別のモード(UITrackingRunLoopMode)に入り、メインスレッドでのネットワークアクティビティへの応答を停止します。これは、パフォーマンス上の理由から行われます。

適切なランループモードでこれらの更新をスケジュールできるはずです(UITrackingRunLoopMode私は信じています)。しかし、私はこれをお勧めしません。

代わりに、UDPネットワークコードを別のスレッド(またはキュー、Yay GCD!)に設定し、メインスレッドでコールバックをスケジュールしてUIを更新してみてください。これにより、ソケットにデータを戻すときにネットワークスレッドが適切な実行ループモードになることが保証されます。

于 2011-11-11T04:53:22.713 に答える