我对CoreMotion和下面的代码有一个问题:
let motionManager = CMMotionManager()
它阻塞了我的主线程4-5秒,我不知道为什么。当我将iPhone XR更新为12.2时,问题就出现了。它不会在12.1.3上用iPhone 6S阻塞主线程。
我认为这可能是硬件问题或iOS版本。
谢谢
发布于 2019-04-11 10:00:08
CoreMotion在init期间自己做了很多事情。
移动初始化,执行不同的线程。
编辑:
我可以在开发iPhone Xs上用12.2确认这个问题。一个真正的二手设备上没有问题。我还看到了违反警告,告诉CoreMotion试图从后台线程访问Applicationstate。
但是,将init移动到一个单独的线程中,可以修复这里挂起的任何UI。协作的缺陷仍然需要一段时间。我创建了一个空的单视图应用程序项目,并更改了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
}
}如果没有单独的线程,红色将保持不变。使用单独的线程,在dev XS上颜色是即时黄色,最后是绿色,在我的iPhone 8 8Plus上是即时绿色。
增添:
有趣的是,如果没有附加XCode,开发设备就没有问题。尝试在不连接到调试器的情况下运行代码。
https://stackoverflow.com/questions/55629406
复制相似问题