From efb2eaad6a8146f468d85325683f1bc9f64c8ebc Mon Sep 17 00:00:00 2001 From: Hariharan Mudaliar Date: Sun, 14 Dec 2025 13:40:35 +0530 Subject: [PATCH] Untested Fix: Memory Leak in Music Player --- .../components/Music/MusicVisualizer.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/DynamicIsland/components/Music/MusicVisualizer.swift b/DynamicIsland/components/Music/MusicVisualizer.swift index 971fb1c..dea4d50 100644 --- a/DynamicIsland/components/Music/MusicVisualizer.swift +++ b/DynamicIsland/components/Music/MusicVisualizer.swift @@ -18,6 +18,10 @@ class AudioSpectrum: NSView { wantsLayer = true setupBars() } + + deinit { + animationTimer?.invalidate() + } required init?(coder: NSCoder) { super.init(coder: coder) @@ -50,6 +54,15 @@ class AudioSpectrum: NSView { } } + override func viewDidMoveToWindow() { + super.viewDidMoveToWindow() + if window == nil { + stopAnimating() + } else if isPlaying { + startAnimating() + } + } + private func startAnimating() { guard animationTimer == nil else { return } animationTimer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { [weak self] _ in @@ -108,6 +121,10 @@ struct AudioSpectrumView: NSViewRepresentable { func updateNSView(_ nsView: AudioSpectrum, context: Context) { nsView.setPlaying(isPlaying) } + + static func dismantleNSView(_ nsView: AudioSpectrum, coordinator: ()) { + nsView.setPlaying(false) + } } #Preview {