以下是该问题的极为简化的版本:
import UIKit
import CoreMotion
class ViewController: UIViewController {
private let manager = CMMotionManager()
private let interval = 0.01
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
startUpdates()
}
private func startUpdates() {
let queue = OperationQueue()
queue.name = "com.demo.motion"
queue.qualityOfService = .userInteractive
queue.maxConcurrentOperationCount = 1
manager.accelerometerUpdateInterval = interval
manager.startAccelerometerUpdates(to: queue) { _, _ in }
}
}
在iPhone XR上运行此命令时,我将收到以下消息:
主线程检查器:在后台线程上调用的UI API: -[UIApplication applicationState] PID:1237,TID:147763,线程名称:com.apple.CoreMotion.MotionThread,队列名称: com.apple.root.default-qos.overcommit,QoS:0
qualityOfService
对此没有任何影响(我更喜欢使用utility
)startUpdates()
函数包装在主调度程序周围,但没有成功基于队列名称以及发生这种情况时,我认为这是内部的东西,与较旧的设备相比,XR中速度更快的处理器才暴露出来。
答案 0 :(得分:6)
这是一个已知问题,已报告给Apple with a radar linked here。
希望很快会得到解决,但是我在SO上没有看到任何条目,因此希望其他人可以使用。
如果可以的话,请提出欺骗。
幸运的是,我还没有看到 的任何不利影响。