Skip to content

Commit 09d84d2

Browse files
committed
Merge fix/memory-leaks into develop
- Fix: resolve memory leaks and remove debug info leakage (PR dwarvesf#346, Rob Mulder) - Fix comprehensive memory leaks (adapted from PR dwarvesf#335, huynguyenh) Addresses the cumulative leak causing 2.89GB memory usage on macOS Sequoia/Tahoe. Closes upstream dwarvesf#326, dwarvesf#336, dwarvesf#351, dwarvesf#352.
2 parents 5994bce + f504ef9 commit 09d84d2

5 files changed

Lines changed: 26 additions & 18 deletions

File tree

LauncherApplication/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
4242
}
4343

4444
func applicationWillTerminate(_ aNotification: Notification) {
45-
// Insert code here to tear down your application
45+
DistributedNotificationCenter.default().removeObserver(self)
4646
}
4747

4848

hidden/Extensions/StackView+Extension.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import Cocoa
1111
extension NSStackView {
1212
func removeAllSubViews() {
1313
for view in self.views {
14+
NSLayoutConstraint.deactivate(view.constraints)
1415
view.removeFromSuperview()
1516
}
1617
}

hidden/Features/Preferences/PreferencesViewController.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ class PreferencesViewController: NSViewController {
4747
}
4848
}
4949

50+
deinit {
51+
NotificationCenter.default.removeObserver(self)
52+
}
53+
5054
//MARK: - VC Life cycle
5155
override func viewDidLoad() {
5256
super.viewDidLoad()

hidden/Features/StatusBar/StatusBarController.swift

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,21 @@ class StatusBarController {
6767
setupUI()
6868
setupAlwayHideStatusBar()
6969
NotificationCenter.default.addObserver(self, selector: #selector(handleScreenParametersChanged), name: NSApplication.didChangeScreenParametersNotification, object: nil)
70-
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
71-
self.collapseMenuBar()
72-
})
70+
DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in
71+
self?.collapseMenuBar()
72+
}
7373

7474
if Preferences.areSeparatorsHidden {hideSeparators()}
7575
autoCollapseIfNeeded()
7676
}
7777

7878
deinit {
7979
NotificationCenter.default.removeObserver(self)
80+
timer?.invalidate()
81+
timer = nil
82+
if let statusItem = self.btnAlwaysHidden {
83+
NSStatusBar.system.removeStatusItem(statusItem)
84+
}
8085
}
8186

8287
@objc private func handleScreenParametersChanged() {
@@ -165,8 +170,8 @@ class StatusBarController {
165170
if isToggle {return}
166171
isToggle = true
167172
self.isCollapsed ? self.expandMenubar() : self.collapseMenuBar()
168-
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
169-
self.isToggle = false
173+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { [weak self] in
174+
self?.isToggle = false
170175
}
171176
}
172177

@@ -269,20 +274,19 @@ extension StatusBarController {
269274
}
270275
@objc private func toggleStatusBarIfNeeded() {
271276
updateCollapsedLengths()
272-
277+
273278
if Preferences.alwaysHiddenSectionEnabled {
274-
if let existing = self.btnAlwaysHidden {
275-
NSStatusBar.system.removeStatusItem(existing)
276-
}
277-
self.btnAlwaysHidden = NSStatusBar.system.statusItem(withLength: btnAlwaysHiddenLength)
278-
if let button = btnAlwaysHidden?.button {
279-
button.image = self.imgIconLine
280-
button.appearsDisabled = true
279+
if self.btnAlwaysHidden == nil {
280+
self.btnAlwaysHidden = NSStatusBar.system.statusItem(withLength: btnAlwaysHiddenLength)
281+
if let button = btnAlwaysHidden?.button {
282+
button.image = self.imgIconLine
283+
button.appearsDisabled = true
284+
}
285+
self.btnAlwaysHidden?.autosaveName = "hiddenbar_terminate"
281286
}
282-
self.btnAlwaysHidden?.autosaveName = "hiddenbar_terminate"
283287
} else {
284-
if let existing = self.btnAlwaysHidden {
285-
NSStatusBar.system.removeStatusItem(existing)
288+
if let statusItem = self.btnAlwaysHidden {
289+
NSStatusBar.system.removeStatusItem(statusItem)
286290
}
287291
self.btnAlwaysHidden = nil
288292
}

hidden/Models/GlobalKeybindingPreferences.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ struct GlobalKeybindPreferences: Codable, CustomStringConvertible {
2020
let keyCode : UInt32
2121

2222
var description: String {
23-
print(keyCode)
2423
var stringBuilder = ""
2524
if self.function {
2625
stringBuilder += "Fn"

0 commit comments

Comments
 (0)