- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 View Controller ,它使用 CoreMotion 来监控设备的 Attitude。
这是调用 startDeviceMotionUpdates() 时使用的处理程序:
/**
* Receives device motion updates from Core Motion and uses the attitude of the device to update
* the position of the attitude tracker inside the bubble level view.
*/
private func handleAttitude(deviceMotion: CMDeviceMotion?, error: Error?) {
guard let attitude = deviceMotion?.attitude else {
GLog.Error(message: "Could not get device attitude.")
return
}
// Calculate the current attitude vector
let roll = attitude.roll
let pitch = attitude.pitch - optimalAngle
let magnitude = sqrt(roll * roll + pitch * pitch)
// Drawing can only happen on the main thread
DispatchQueue.main.async {
[weak self] in
guard let weakSelf = self else {
GLog.Log("could not get weak self")
return
}
// Move the bubble in the attitude tracker to match the current attitude
weakSelf.bubblePosX.constant = CGFloat(roll * weakSelf.attitudeScalar)
weakSelf.bubblePosY.constant = CGFloat(pitch * weakSelf.attitudeScalar)
// Set the border color based on the current attitude.
if magnitude < weakSelf.yellowThreshold {
weakSelf.attitudeView.layer.borderColor = weakSelf.green.cgColor
} else if magnitude < weakSelf.redThreshold {
weakSelf.attitudeView.layer.borderColor = weakSelf.yellow.cgColor
} else {
weakSelf.attitudeView.layer.borderColor = weakSelf.red.cgColor
}
// Do the actual drawing
weakSelf.view.layoutIfNeeded()
}
}
我添加了 [weak self] 看它是否能解决问题,但它没有。此崩溃不容易重现。
当我完成使用 CoreMotion 的 VC 时,我在 VC 的 viewWillDisappear() 方法中调用 stopDeviceMotionUpdates() 。此 VC 是应用程序中唯一导入 CoreMotion 的类。
但是,当我到达下一个 VC 时,偶尔会看到 EXC_BAD_ACCESS 被抛出到一个 com.apple.CoreMotion.MotionThread 上。
有人知道为什么 CoreMotion 会在使用它的 VC 被关闭后生成一个线程吗?当崩溃发生时,我已经验证了 VC 不再在内存中。是的,我正在处理的两个 VC 是模态呈现的。
我检查了内存图,当崩溃发生时,会报告这些 CoreMotion 对象:
和:
我不知道在 CoreMotionManager 的实例被释放后这些对象是否应该仍然在内存中。根据内存图,内存中没有CoreMotionManager的实例。
导入CoreMotion的VC也导入了ARKit。不确定 CoreMotion 和 ARKit 之间的某些疯狂交互是否是问题所在。
在主线程和 MotionThread(14) 之间似乎确实发生了一些事情:
我不确定如何处理主线程堆栈跟踪。
有时,当 CoreMotion VC 被关闭时,我注意到它使用的内存在释放时存在延迟。发布总是最终发生。
感谢任何能提供帮助的人!
最佳答案
我们有一个 ARSCNView 成员。当我们关闭使用 sceneView 成员的 VC 时,我们没有调用 sceneView.session.pause() 。一行代码。就是这样。
关于调用 stopDeviceMotionUpdates() 后抛出 iOS CoreMotion.MotionThread EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63946685/
我有一个 View Controller ,它使用 CoreMotion 来监控设备的 Attitude。 这是调用 startDeviceMotionUpdates() 时使用的处理程序: /**
我们的应用程序中有一个 CMMotionManager 实例,我们使用它以 5Hz 的频率获取传感器更新。以下是我们用来启动运动更新的代码: [self.motionManager startDevi
我是一名优秀的程序员,十分优秀!