From 97052666312dde0a795d430ff1bd1faa297b9e76 Mon Sep 17 00:00:00 2001 From: ansermi Date: Wed, 19 Mar 2025 18:56:16 +0800 Subject: [PATCH] fix: resolve memory leak issue when update menu on macOS --- packages/tray_manager/macos/Classes/TrayManagerPlugin.swift | 6 +++--- packages/tray_manager/macos/Classes/TrayMenu.swift | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/tray_manager/macos/Classes/TrayManagerPlugin.swift b/packages/tray_manager/macos/Classes/TrayManagerPlugin.swift index 731da79..b817540 100644 --- a/packages/tray_manager/macos/Classes/TrayManagerPlugin.swift +++ b/packages/tray_manager/macos/Classes/TrayManagerPlugin.swift @@ -194,12 +194,12 @@ public class TrayManagerPlugin: NSObject, FlutterPlugin, NSMenuDelegate { let args:[String: Any] = call.arguments as! [String: Any] trayMenu = TrayMenu(args["menu"] as! [String: Any]) - trayMenu?.onMenuItemClick = { - (menuItem: NSMenuItem) in + trayMenu?.onMenuItemClick = { [weak self] (menuItem: NSMenuItem) in + guard let strongSelf = self else { return } let args: NSDictionary = [ "id": menuItem.tag, ] - self.channel.invokeMethod(kEventOnTrayMenuItemClick, arguments: args, result: nil) + strongSelf.channel.invokeMethod(kEventOnTrayMenuItemClick, arguments: args, result: nil) } trayMenu?.delegate = self diff --git a/packages/tray_manager/macos/Classes/TrayMenu.swift b/packages/tray_manager/macos/Classes/TrayMenu.swift index ceaad16..3119693 100644 --- a/packages/tray_manager/macos/Classes/TrayMenu.swift +++ b/packages/tray_manager/macos/Classes/TrayMenu.swift @@ -52,9 +52,9 @@ public class TrayMenu: NSMenu, NSMenuDelegate { case "submenu": if let submenuDict = itemDict["submenu"] as? NSDictionary { let submenu = TrayMenu(submenuDict as! [String : Any]) - submenu.onMenuItemClick = { - (menuItem: NSMenuItem) in - self.statusItemMenuButtonClicked(menuItem) + submenu.onMenuItemClick = { [weak self] (menuItem: NSMenuItem) in + guard let strongSelf = self else { return } + strongSelf.statusItemMenuButtonClicked(menuItem) } self.setSubmenu(submenu, for: menuItem) }