- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一旦我将 CGEvent 转换为 NSEvent (我需要),我就很难释放它。我正在使用 CGEventTap 来执行此操作。从文档中可以看出
Returns: An autoreleased NSEvent object that is equivalent to cgEvent
The returned object retains the CGEventRef object (cgEvent) until it (the Objective-C object) is freed—it then releases the CGEventRef object. If no Cocoa event corresponds to the CGEventRef object, this method returns nil.
所以我编写了一些代码来转换为 NSEvent,然后立即将 NSEvent 设置为 nil(作为测试)。即使将其设置为 nil 后,NSEvent 或带有它的 CGEvent 都不会被释放,并且我的内存会随着鼠标的每次移动而不断增加。我不太清楚为什么。我觉得我在这里错过了一些基本的东西。
这是代码。
func eventCallBack(proxy: CGEventTapProxy, type: CGEventType, var event: CGEvent, refcon: UnsafeMutablePointer<Void>) -> Unmanaged<CGEvent>? {
//this line is what causes the memory leak
if var e: NSEvent? = NSEvent(CGEvent: event) {
e = nil //according to docs, this should decrease reference count to event
}
return Unmanaged.passUnretained(event!)
}
最佳答案
正如 @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)
}
关于swift - CGEventTap、CGEvent 和 NSEvent 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235072/
使用 CGEventTap 停止观看键盘事件点击的正确方法是什么? 我正在构建一个简单的后台应用程序,用于转换特定键的输出。感谢this excellent post on CGEventTap ,我
我正在尝试使用 CGCreateEventTap 来监视全局鼠标单击,但是当我这样做时,它似乎会阻止与我自己的应用程序的交互。在其他正在运行的应用程序中单击鼠标可以正常工作,但我自己的应用程序(即 D
所以,我浪费了很多时间来创建这个非常酷的键盘宏应用程序。它工作得很好,唯一的问题是几分钟后,它就停止工作了。当我按下某个键时,它不再被调用。 我无法锁定它,但它总是需要至少 30 秒才能发生。通常几分
我正在使用 Quartz CGEventTap 试图全局拦截大写锁定按下并阻止它们(让它们做一些有用的事情)。我成功检测到 Capslock 按下,但到目前为止还无法阻止它们。我的代码(源自 this
此应用程序的目的是 24/7 在后台运行并将鼠标锁定在屏幕中央。它用于与一系列 Flash 程序一起模拟鼠标的操纵杆式移动。我已经尝试使用 Cocoa/Quartz 中内置的其他方法来完成此任务,但它
一旦我将 CGEvent 转换为 NSEvent (我需要),我就很难释放它。我正在使用 CGEventTap 来执行此操作。从文档中可以看出 Returns: An autoreleased NSE
我有一个用于 CGEventTap 的 myCGEventCallback 函数,它接受参数“refcon:UnsafeMutableRawPointer?”。 我使用 将我的主 ViewContro
我正在尝试使 CGEventTap 工作。我认为我已经正确完成了所有操作,但是当我运行时出现此错误: Apple Mach-O Linker (id) Error Undefined symbols
我是一名优秀的程序员,十分优秀!