iOS5 Что означает «Отмена сообщения для события 0 из-за слишком большого количества необработанных сообщений»? - PullRequest
47 голосов
/ 22 октября 2011

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

Discarding message for event 0 because of too many unprocessed messages

в консоли xcode. Что это значит точно?

Ответы [ 2 ]

96 голосов
/ 13 ноября 2011

Об этом говорит служба технической поддержки Apple (после оплаты 49 долл. США за инцидент технической поддержки разработчиков):

Эти сообщения приходят из Базовой инфраструктуры. Наиболее вероятной причиной этих сообщений является отсутствие цикла выполнения в потоке, в котором был создан CLLocationManager. (Это означает, что CLLocationManager не был создан в главном потоке.) Отбрасываемые сообщения являются сообщениями о местоположении: событие 0 - это местоположение, а событие 24 - это, например, обновление статуса авторизации. Поскольку сообщения отбрасываются, вы не увидите соответствующих обратных вызовов делегата. Вы установили геозону или какой-то другой обратный вызов и недостаточно быстро ее обслуживаете? Предел очереди, по-видимому, равен 10, прежде чем он начнет сбрасывать события и регистрировать это сообщение. Эта информация еще не документирована публично. Я работаю с основной группой локации, чтобы улучшить сообщаемые сообщения и посмотреть, можно ли это лучше документировать.

1 голос
/ 29 мая 2012

Майкл прав, причина в том, что диспетчер местоположений может работать только в потоке, в котором работает цикл (основной поток по умолчанию), в противном случае обратные вызовы, отправленные им, не будут обрабатываться. Пожалуйста, смотрите следующее предупреждение, как только я попытался инициализировать Zoosh SDK в фоновом потоке:

УВЕДОМЛЕНИЕ. Диспетчер местоположения (0x11b5c9d0) был создан в очереди отправки, выполняющейся в потоке, отличном от основного потока. Разработчик несет ответственность за обеспечение того, чтобы в потоке, в котором размещен объект диспетчера местоположений, выполнялся цикл выполнения. В частности, создание администраторов местоположений в произвольных очередях отправки (не прикрепленных к основной очереди) не поддерживается и приведет к тому, что обратные вызовы не будут получены.

Понятно. И помещение инициализации в основной поток очищает это предупреждение, и «Сбрасывание сообщения для события 0 из-за слишком большого числа необработанных сообщений» не происходит.

...