Полностью нормализованный дизайн (т.е., "Больше Таблиц") более гибок, легче поддержать и избегает дублирования данных, что означает, что Ваша целостность данных будет намного легче осуществить.
Те - мощные причины нормализовать. Я принял бы решение нормализовать сначала, и затем только, чтобы денормализовать конкретный таблицы после , Вы видели, что производительность становилась проблемой.
Мой опыт состоит в том, что в реальном мире, Вы не достигнете точки, где денормализация необходима, даже с очень большими наборами данных.
В SnowLeopard есть новый метод класса на NSEvent
, который делает именно то, что вы хотите: + (id) addGlobalMonitorForEventsMatchingMask: (NSEventMask) обработчик маски: (void (^) (NSEvent *)) блок
. Вам понадобится mask = NSMouseMovedMask
.
Аналогичный вопрос уже задавался в StackOverflow: Как заставить прозрачный подкласс NSView обрабатывать события мыши?
Подводя итог, метод прозрачного просмотра не работал. Кварцевые метки событий кажутся лучшим ответом.
Вот несколько советов по работе с метчиками:
Создайте ответвитель с помощью CGEventTapCreate
.
a) Для параметра местоположения (первого) вы, вероятно, захотите использовать kCGSessionEventTap
.
б) Для параметра размещения (второго) вам, вероятно, понадобится kCGHeadInsertEventTap
.
c) Для параметра маски события попробуйте (1 << kCGEventMouseMoved)
.
Создайте источник цикла выполнения с помощью CFMachPortCreateRunLoopSource
, передав отвод события в качестве второго параметра.
] Добавьте источник цикла выполнения в ваш цикл выполнения. Предполагая, что вы хотите, чтобы он был добавлен в основной цикл выполнения, выполните:
CFRunLoopAddSource (CFRunLoopGetMain (), sourceFromStep2, kCFRunLoopDefaultMode);
Включите отвод событий с помощью CGEventTapEnable
Если вы хотите отслеживать мышь независимо от того, где она находится, вам нужен CGEventTap. Не существует эквивалента какао. Если вы просто хотите отслеживать это в своем приложении, вам следует более подробно объяснить, почему вы не можете этого сделать.