From 76f294c1caf377416dc396a7605758c9b4a8a5bb Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Sat, 11 Oct 2025 17:01:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=80=80=E5=87=BA=E5=AF=BC?= =?UTF-8?q?=E8=88=AA=E5=A5=94=E6=BA=83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ios/Classes/AmapViewController.swift | 49 ++++++++++++++----- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/local_plugins/amap_service/ios/Classes/AmapViewController.swift b/local_plugins/amap_service/ios/Classes/AmapViewController.swift index c6bda6a36..c421818bf 100644 --- a/local_plugins/amap_service/ios/Classes/AmapViewController.swift +++ b/local_plugins/amap_service/ios/Classes/AmapViewController.swift @@ -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,21 +150,36 @@ 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 { // 如果是在导航控制器中,使用 pop @@ -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() } } }