CGEventTap,CGEvent& NSEvent内存泄漏

时间:2016-02-05 23:07:41

标签: swift cocoa

一旦我将它转换为NSEvent(我需要),我很难释放CGEvent。我正在使用CGEventTap这样做。 从文件中说明

  

返回:一个自动释放的NSEvent对象,它等同于cgEvent

     

返回的对象保留CGEventRef对象(cgEvent),直到释放它(Objective-C对象)为止,然后释放CGEventRef对象。如果没有Cocoa事件对应于CGEventRef对象,则此方法返回nil。

所以我编写了一些代码转换为NSEvent,然后立即将NSEvent设置为nil(作为测试)。即使将它设置为nil之后,NSEvent或带有它的CGEvent也不会被释放,并且我的记忆会随着每次鼠标移动而不断上升。我不完全确定为什么。我觉得我在这里缺少一些基本的东西。

这是代码。

NSString *str = sfs(@selector(crazyObject));

1 个答案:

答案 0 :(得分:0)

正如@Willeke评论的那样,autoreleasepool为我修复了内存泄漏。

Swift应该自动清理NSEvents,因此在autoreleasepool中不需要将e设置为nil。

这对我有用:

func eventCallBack(proxy: CGEventTapProxy, type: CGEventType, var event: CGEvent, refcon: UnsafeMutablePointer<Void>) -> Unmanaged<CGEvent>? {

  autoreleasepool{ 
    var e: NSEvent? = NSEvent(CGEvent: event)
    // code using e
  }

  return Unmanaged.passUnretained(event)
}