我正在对我的应用进行一些性能测试,并注意到运行一些集成需要很长时间。过了一会儿,我得到了一大堆
Discarding message for event 0 because of too many unprocessed messages
在xcode控制台中。这究竟是什么意思?
答案 0 :(得分:94)
这就是Apple技术支持部门对此的说法(在支付49美元的开发者技术支持事件后):
这些消息来自Core Location框架。这些消息最可能的原因是在创建CLLocationManager的线程上没有运行循环。 (这意味着未在主线程上创建CLLocationManager。)正被丢弃的消息是位置消息:事件0是位置,事件24是授权状态更新。因为丢弃了消息,所以您将看不到正在调用的相应委托回调。您是否设置了地理围栏或其他一些回调并且没有足够快地为其提供服务?在开始转储事件并记录此消息之前,队列限制似乎为10。 此信息尚未公开记录。我正在与Core Location团队合作,以改进报告的消息,看看是否可以更好地记录这些消息。
答案 1 :(得分:1)
迈克尔是对的,原因是位置管理器只能在其上运行循环的线程上运行(默认情况下是主线程),否则将不会处理它发送的回调。一旦我尝试在后台线程上初始化Zoosh SDK,请参阅以下警告:
注意,在主线程以外的线程上执行的调度队列上创建了位置管理器(0x11b5c9d0)。开发人员有责任确保在分配了位置管理器对象的线程上运行运行循环。特别是,不支持在任意调度队列(未附加到主队列)中创建位置管理器,这将导致无法接收回调。
很清楚。将初始化放入主线程会清除此警告,并且不会出现“因为过多的未处理消息而丢弃事件0的消息”。