gpt4 book ai didi

ios - 如果 CoreMotion 的更新处理程序完成速度不够快怎么办?

转载 作者:行者123 更新时间:2023-11-29 10:35:37 26 4
gpt4 key购买 nike

我正在注册以接收来自 CMMotionManager 的更新,如下所示:

motionManager.startDeviceMotionUpdatesToQueue(deviceMotionQueue) {
[unowned self] (deviceMotion, error) -> Void in

// ... handle data ...
}

其中 deviceMotionQueue 是具有最高服务质量的 NSOperationQueue,即可能的最高更新率:

self.deviceMotionQueue.qualityOfService = NSQualityOfService.UserInteractive

这意味着我经常收到更新。真的很喜欢。所以我想知道:如果我处理一次更新的速度不够快会怎样?如果更新间隔比'handle data'的执行时间短?运动管理器会丢弃一些信息吗?或者它会排队并在一段时间后内存不足吗?或者这根本不可行?

最佳答案

很难知道内部 CoreMotion 实现将做什么,并且考虑到它所做的是“实现细节”,即使您可以辨别其当前行为,您也不会希望继续依赖该行为。

我认为常见的解决方案是在运动更新处理程序中执行最小 量的工作,然后自己管理工作/速率限制/等。因此,例如,如果您想删除在处理上次更新时到达的插页式更新,您可以让传递给 CoreMotion 的更新处理程序不做任何事情,只是(安全地)添加 deviceMotion 到一个可变数组,然后将“真正的”处理程序排入另一个队列。真正的处理程序可能会有这样的决策树:

  • 如果数组为空,立即返回
  • 否则(安全地)获取最后一个元素,清除数组中的所有元素,并根据最后一个元素进行工作

这会产生这样的效果,即让您只阅读最近的内容,但也可以了解遗漏了多少更新,以及(如果有用的话)那些遗漏的更新是什么。根据您的应用,将错过的事件作为一个组进行批处理可能很有用。

但要点是:如果您想确定这样一个系统的行为方式,您必须自己管理它。

关于ios - 如果 CoreMotion 的更新处理程序完成速度不够快怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com