|
|
|
@ -56,9 +56,15 @@ class AmapViewController: UIViewController { |
|
|
|
cleanupResources() |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 清理资源,包括移除通知观察者 |
|
|
|
*/ |
|
|
|
private func cleanupResources() { |
|
|
|
print("开始清理导航资源") |
|
|
|
|
|
|
|
// 移除通知观察者,防止内存泄漏 |
|
|
|
NotificationCenter.default.removeObserver(self, name: NSNotification.Name("ExitNavigation"), object: nil) |
|
|
|
|
|
|
|
// 停止语音合成 |
|
|
|
speechSynthesizer.stopSpeaking(at: .immediate) |
|
|
|
|
|
|
|
@ -144,20 +150,35 @@ class AmapViewController: UIViewController { |
|
|
|
print("导航------------------ startNavigation_4") |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 退出导航并清理资源 |
|
|
|
* 添加了nil检查以防止崩溃 |
|
|
|
*/ |
|
|
|
@objc private func exitNavigation() { |
|
|
|
print("导航------------------ 退出导航,清理资源") |
|
|
|
|
|
|
|
// 安全检查:确保driveManager存在再进行操作 |
|
|
|
guard let manager = driveManager else { |
|
|
|
print("⚠️ driveManager已为nil,跳过导航清理") |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// 停止导航 |
|
|
|
driveManager.stopNavi() |
|
|
|
driveManager.removeDataRepresentative(driveView) |
|
|
|
driveManager.delegate = nil |
|
|
|
manager.stopNavi() |
|
|
|
|
|
|
|
// 移除导航视图 |
|
|
|
driveView.delegate = nil |
|
|
|
driveView.removeFromSuperview() |
|
|
|
driveView = nil |
|
|
|
// 安全检查:确保driveView存在再进行操作 |
|
|
|
if let view = driveView { |
|
|
|
manager.removeDataRepresentative(view) |
|
|
|
view.delegate = nil |
|
|
|
view.removeFromSuperview() |
|
|
|
} else { |
|
|
|
print("⚠️ driveView已为nil,跳过视图清理") |
|
|
|
} |
|
|
|
|
|
|
|
// 销毁导航管理器 |
|
|
|
// 清理管理器 |
|
|
|
manager.delegate = nil |
|
|
|
driveManager = nil |
|
|
|
driveView = nil |
|
|
|
|
|
|
|
// 关闭当前页面 - 修复:使用正确的退出方式 |
|
|
|
if let navigationController = navigationController { |
|
|
|
@ -168,13 +189,19 @@ class AmapViewController: UIViewController { |
|
|
|
dismiss(animated: true, completion: nil) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 添加通知监听器 |
|
|
|
* 使用弱引用避免循环引用和对象销毁后的调用 |
|
|
|
*/ |
|
|
|
private func addNSNotification(){ |
|
|
|
NotificationCenter.default.addObserver( |
|
|
|
forName: NSNotification.Name("ExitNavigation"), |
|
|
|
object: nil, |
|
|
|
queue: .main |
|
|
|
) { _ in |
|
|
|
self.exitNavigation() |
|
|
|
) { [weak self] _ in |
|
|
|
// 使用弱引用避免在对象销毁后调用方法 |
|
|
|
self?.exitNavigation() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|