Untested Fix: Memory Leak in Music Player

This commit is contained in:
Hariharan Mudaliar 2025-12-14 13:40:35 +05:30
commit efb2eaad6a
No known key found for this signature in database
GPG key ID: D04F1C2B9194DDFC

View file

@ -19,6 +19,10 @@ class AudioSpectrum: NSView {
setupBars() setupBars()
} }
deinit {
animationTimer?.invalidate()
}
required init?(coder: NSCoder) { required init?(coder: NSCoder) {
super.init(coder: coder) super.init(coder: coder)
wantsLayer = true wantsLayer = true
@ -50,6 +54,15 @@ class AudioSpectrum: NSView {
} }
} }
override func viewDidMoveToWindow() {
super.viewDidMoveToWindow()
if window == nil {
stopAnimating()
} else if isPlaying {
startAnimating()
}
}
private func startAnimating() { private func startAnimating() {
guard animationTimer == nil else { return } guard animationTimer == nil else { return }
animationTimer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { [weak self] _ in animationTimer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { [weak self] _ in
@ -108,6 +121,10 @@ struct AudioSpectrumView: NSViewRepresentable {
func updateNSView(_ nsView: AudioSpectrum, context: Context) { func updateNSView(_ nsView: AudioSpectrum, context: Context) {
nsView.setPlaying(isPlaying) nsView.setPlaying(isPlaying)
} }
static func dismantleNSView(_ nsView: AudioSpectrum, coordinator: ()) {
nsView.setPlaying(false)
}
} }
#Preview { #Preview {