У меня есть функция myCGEventCallback для CGEventTap, которая принимает параметр "refcon: UnsafeMutableRawPointer?".
Я передаю свой основной ViewController как указатель на обратный вызов, используя
let pointer = UnsafeMutableRawPointer(Unmanaged.passRetained(self).toOpaque())
Затем внутри обратного вызова я получаю доступ к ViewController, используя
let sender:ViewController = Unmanaged<T>.fromOpaque(refcon!).takeRetainedValue()
Когда происходит событие, обратный вызов работает нормально. Однако это работает только 4 раза. Когда то же самое событие происходит в пятый раз, мое приложение вылетает, и консоль отладки просто говорит «LLDB».
Похоже, что он падает, когда я пытаюсь получить доступ к отправителю. "Sender.someFunction ()". Сбой перед запуском функции, поэтому я предполагаю, что у нее возникли проблемы с доступом к отправителю.
Это из-за плохого управления памятью? Может быть, мне нужно освободить указатель? Если да, то как и где я это сделаю?
Спасибо!