Подтвердить что ты не робот

IOS5 Что означает "Отбрасывание сообщения для события 0 из-за слишком большого количества необработанных сообщений"?

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

Discarding message for event 0 because of too many unprocessed messages

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Это ясно. И включение инициализации в основной поток очищает это предупреждение и не происходит "Отбрасывание сообщения для события 0 из-за слишком большого количества необработанных сообщений".