iOS 12.2 : CMMotionManager 阻塞主线程



我对CoreMotion和以下代码有问题:

let motionManager = CMMotionManager()

它阻塞了我的主线程 4-5 秒,我不知道为什么。当我将iPhone XR更新到12.2时出现问题。它不会阻塞 6S 在 12.1.3 上的主线程。

我认为这可能是硬件问题或iOS版本。

谢谢

CoreMotion 在初始化期间自己做了很多事情。
移动初始化执行不同的线程。
编辑:

我可以在开发iPhone Xs上确认12.2的问题。我还看到违规警告,告诉 CoreMotion 尝试从后台线程访问应用程序状态。

但是,将 init 移动到单独的线程会修复此处挂起的任何 UI。coremotion的初始化仍然需要一段时间。我创建了一个空的单视图应用程序项目并更改了 ViewController 类

class ViewController: UIViewController {
    var motionManager: CMMotionManager?
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        view.backgroundColor = UIColor.red
        DispatchQueue.global().async {
            self.motionManager = CMMotionManager()
            DispatchQueue.main.async {
                self.view.backgroundColor = UIColor.green
            }
        }
        view.backgroundColor = UIColor.yellow
    }
}

如果没有单独的线程,红色仍然存在。使用单独的线程,颜色在开发XS上是即时黄色,最后是绿色,在我的iPhone 8Plus上是即时绿色。

加法:
有趣的是,如果没有连接XCode,开发设备没有问题。尝试在不连接到调试器的情况下运行代码。

相关内容

  • 没有找到相关文章

最新更新