【问题标题】:iOS5 What does "Discarding message for event 0 because of too many unprocessed messages" mean?iOS5“由于太多未处理的消息而丢弃事件0的消息”是什么意思?
【发布时间】:2011-12-13 00:39:15
【问题描述】:

我正在对我的应用进行一些性能测试,发现运行一些集成需要很长时间。过了一会儿,我得到了一大堆

Discarding message for event 0 because of too many unprocessed messages

在 xcode 控制台中。这究竟是什么意思?

【问题讨论】:

  • 我也见证了这些信息。但不确定是什么原因造成的。
  • 最近我在 iOS 5.1.1 上使用 MapKit 收到了这条消息。无法弄清楚是什么问题,但重启我的 iPhone 已经解决了!!

标签: ios xcode performance debugging


【解决方案1】:

这是 Apple 技术支持对此的评价(在为开发者技术支持事件支付 49 美元后):

这些消息来自核心位置框架。这些消息最可能的原因是在创建 CLLocationManager 的线程上没有运行运行循环。 (这意味着 CLLocationManager 不是在主线程上创建的。)被丢弃的消息是位置消息:例如,事件 0 是位置,事件 24 是授权状态更新。由于消息被丢弃,您将看不到调用适当的委托回调。您是否设置了地理围栏或其他回调,但服务速度不够快?在开始转储事件并记录此消息之前,队列限制似乎为 10。 此信息尚未公开记录。我正在与核心位置团队合作改进报告的消息,看看是否可以更好地记录。

【讨论】:

  • 谢谢你——我会花一些时间来思考为什么代理回调没有触发。我只是将 [[CLLocationManager alloc] init] 包装在一个 dispatch_async(dispatch_get_main_queue(), ^{...}) 块中以完成这项工作
  • 在我看来,600 次重复 49 美元非常值得。
【解决方案2】:

Michael 是对的,原因是位置管理器只能在有运行循环的线程上运行(默认为主线程),否则它发送的回调将不会被处理。一旦我尝试在后台线程上初始化 Zoosh SDK,请查看以下警告:

注意,在主线程以外的线程上执行的调度队列上创建了位置管理器 (0x11b5c9d0)。开发人员有责任确保在分配位置管理器对象的线程上运行运行循环。特别是,不支持在任意调度队列(未附加到主队列)中创建位置管理器,这将导致无法接收回调。

很清楚。并且将初始化放入主线程会清除此警告,并且不会发生“由于太多未处理的消息而丢弃事件 0 的消息”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多