Является ли хорошей практикой освобождение NULL-указателя в C? [дубликат]

Я только что поэкспериментировал с методом addLocalMonitorForEventsMatchingMask: handler: в NSEvent и наткнулся на следующий вопрос: как узнать, были ли нажаты только определенные модификаторы ?

Краткий пример, чтобы задать этот вопрос в контексте: я хотел прослушать сочетание клавиш «⌘ + W». Поэтому я написал следующий код:

[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *theEvent) {
    if ([theEvent modifierFlags] & NSCommandKeyMask && [theEvent keyCode] == 13) {
        [self.window performClose:self];
    }
    return theEvent;
}];

Это работает хорошо, однако ярлык будет активирован, даже если будут нажаты другие клавиши-модификаторы, например, «⌃ + ⌘ + W» или «⇧ + ⌃ + ⌥ + ⌘ + W». Есть ли способ обойти это?

Простым решением было бы проверить все остальные клавиши-модификаторы и убедиться, что они не нажаты. Это кажется утомительным и подверженным ошибкам - кроме того » это достаточно уродливо, как сейчас с унарным "&". Вдобавок у вас могут возникнуть проблемы, если (по какой-то причине) к раскладке клавиатуры будет добавлена ​​другая клавиша-модификатор.

Как всегда, я благодарен за любые рекомендации.

14
задан Florian Pilz 21 May 2011 в 20:25
поделиться