В Xcode 10.1 с Swift 4.2 у меня возникает утечка памяти, когда я добавляю локальный монитор для событий нажатия клавиш в моем NSViewController, чтобы он был представлен как минимальная версия (без nib и xib).
override func loadView() {
self.view = NSView()
self.view.wantsLayer = true
}
override func viewDidLoad(){
super.viewDidLoad
NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: handler)
}
lazy var handler:(NSEvent)->NSEvent? = { [ weak self ,unowned picker = picker] event in
picker.keyDown(with: event)
return event
}
Эта утечка памяти содержит мало информации: Утечка памяти
РЕДАКТИРОВАТЬ
В методе deinit removeMonitor называется
deinit {
NSEvent.removeMonitor(self)
}
РЕДАКТИРОВАТЬ 2
Проблема решена:
override func loadView() {
self.view = NSView()
self.view.wantsLayer = true
}
var monitor:Any? // This is essential
override func viewDidLoad(){
super.viewDidLoad
monitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: handler)
}
lazy var handler:(NSEvent)->NSEvent? = { [ weak self ,unowned picker = picker] event in
picker.keyDown(with: event)
return event
}
deinit {
NSEvent.removeMonitor(monitor)
}