mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
macos: break reference cycle to window to allow window to free memory
Fixes #366 The comment in the Swift code explains what was happening here: > I don't know if this is the right place, but because of WindowAccessor in our > SwiftUI hierarchy, we have a reference cycle between view and window and windows > are never freed. When the window is closed, the window controller is deinitialized, > so we can use this opportunity detach the view from the window and break the cycle. An alternate solution would be to make our reference back to the window "weak" but we appear to not be able to do that with SwiftUI property wrappers such as `@State` and `@Binding` and so on.
This commit is contained in:
@ -11,4 +11,14 @@ class PrimaryWindowController: NSWindowController {
|
|||||||
guard let manager = self.windowManager else { return }
|
guard let manager = self.windowManager else { return }
|
||||||
manager.triggerNewTab(for: window)
|
manager.triggerNewTab(for: window)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
// I don't know if this is the right place, but because of WindowAccessor in our
|
||||||
|
// SwiftUI hierarchy, we have a reference cycle between view and window and windows
|
||||||
|
// are never freed. When the window is closed, the window controller is deinitialized,
|
||||||
|
// so we can use this opportunity detach the view from the window and break the cycle.
|
||||||
|
if let window = self.window {
|
||||||
|
window.contentView = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user