Приложение перестает получать данные из сокета при прокрутке пользовательского интерфейса - PullRequest
3 голосов
/ 12 октября 2011

У меня есть приложение для iPad, которое получает данные через UDP-сокеты.И у него есть UIWebView для просмотра веб-страниц.Но при выполнении прокрутки в UIWebView все зависает и данные не принимаются.Я искал, и это как-то связано с runloops и потоками.Но если UIWebView не может работать в другом потоке, кроме основного, как я могу получать данные при выполнении прокрутки?Очень важно продолжать получать данные.

В проекте используется класс AsyncUdpSocket из Какао AsyncSocket , который работает довольно хорошо.А также синглтон-класс от Мэтта Галлахера .Все работает в основном потоке, прием UDP и пользовательский интерфейс.

Заранее спасибо!

1 Ответ

1 голос
/ 11 ноября 2011

Когда вы выполняете прокрутку, цикл запуска входит в другой режим (UITrackingRunLoopMode) и перестает отвечать на сетевую активность в главном потоке.Это сделано из соображений производительности.

Вы должны быть в состоянии запланировать эти обновления в надлежащем режиме запуска (я считаю, UITrackingRunLoopMode).Однако я бы не рекомендовал это.

Вместо этого попробуйте настроить сетевой код UDP в другом потоке (или очереди, да, GCD!) И запланировать обратные вызовы в основном потоке для обновления пользовательского интерфейса.Это гарантирует, что сетевой поток имеет правильный режим запуска при возврате данных в сокет.

...