CoreMotion的主线程检查器警告仅出现在2018年型号的iPhone上

时间:2019-02-09 15:47:06

标签: ios iphone xcode core-motion

以下是该问题的极为简化的版本:

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

  • 我的设备正在运行 12.3 ,它是当前最新的iOS版本
  • 在各种iPad(2018年前),iPhone 8,iPhone 6S和其他旧型号上运行此程序,不会出现此问题。
  • 更改qualityOfService对此没有任何影响(我更喜欢使用utility
  • 出于好奇,我将整个startUpdates()函数包装在主调度程序周围,但没有成功

基于队列名称以及发生这种情况时,我认为这是内部的东西,与较旧的设备相比,XR中速度更快的处理器才暴露出来。

1 个答案:

答案 0 :(得分:6)

这是一个已知问题,已报告给Apple with a radar linked here

希望很快会得到解决,但是我在SO上没有看到任何条目,因此希望其他人可以使用。

如果可以的话,请提出欺骗。

幸运的是,我还没有看到 的任何不利影响。