CGEventTap使得CGEvent的NSEvent解除分配实例

时间:2016-12-01 23:03:02

标签: objective-c core-graphics nsevent cgeventtap

我正在使用EventTap,我需要在代码中设置CGEvent的压力(我正在制作压力平均应用程序)。

目前我没有看到任何其他方式,只能将我的CGEvent转换为NSEvent来改变压力。现在的问题是偶尔我会得到“解除分配的实例错误”并且我的应用程序崩溃了。我正在使用ARC。我使用Zombie Instrument来追踪问题。这是仪器的屏幕截图。显然,某处CGEvent或NSEvent正在获取发布消息,但它已经发布。我不知道我怎么能更好地控制这个释放过程...... :(。

这是我在handleCGEvent方法中使用的代码

CGEventRef handleCGEvent(CGEventTapProxy proxy, CGEventType type,     CGEventRef eventRef, void *refcon)
{
    if(type == kCGEventLeftMouseDragged)
    {
        NSEvent *wacomEvent = [NSEvent eventWithCGEvent:eventRef];

    if (wacomEvent != nil && wacomEvent.subtype == NSTabletPointEventSubtype)
    {
        [pressureBuffer replaceObjectAtIndex:pressureBufferIndex withObject:[NSNumber numberWithFloat: wacomEvent.pressure]];
        pressureBufferIndex++;
        pressureBufferIndex %= pressureBufferSize;

        if (pressureBufferFilledCount < pressureBufferSize)
            pressureBufferFilledCount++;

        float sum = 0;

        for (NSUInteger i = 0; i < pressureBufferFilledCount; i++)
        {
            sum += [[pressureBuffer objectAtIndex:i] floatValue];
        }

        averagePressure = sum / pressureBufferFilledCount;

        NSEvent *newPressureEvent = [NSEvent mouseEventWithType:wacomEvent.type
                                                       location:wacomEvent.locationInWindow
                                                  modifierFlags:wacomEvent.modifierFlags
                                                      timestamp:wacomEvent.timestamp
                                                   windowNumber:wacomEvent.windowNumber
                                                        context:wacomEvent.context
                                                    eventNumber:wacomEvent.eventNumber
                                                     clickCount:wacomEvent.clickCount
                                                       pressure:averagePressure]; //averagePressure

        return [newPressureEvent CGEvent];
    }
}

return eventRef;
}

...

谢谢,任何帮助都非常感谢!!!!

screenshot of zombie instrument !!!

0 个答案:

没有答案