Когда это может позволить снова вздремнуть, вы должны сделать:
отаю над приложением macOS (назовем его «приложение отображения»), которое отображает часы и другие данные, которые управляются другим приложением («управляющим приложением») на той же машине через соединение TCP. Я заметил, что, когда приложение дисплея некоторое время не используется (> 60 секунд), а затем планирует NSTimer (с интервалом 0,2 секунды), требуетсяочень Задолго до того, как таймер сработает в первый раз (в диапазоне 6-10 секунд, иногда дольше.) Это происходит в основном, когда приложение дисплея не находится на переднем крае (потому что это приложение управления.) Как только таймер сработал в первый раз , он работает как положено (с некоторыми небольшими, ожидаемыми задержками в таймере) в течение некоторого времени.
Но когда таймер работает в течение длительного времени (более 5 минут), существуют похожие крайние задержки между срабатыванием (также 6-10 секунд). Это похоже на ручное планирование таймера с помощью
[[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
немного откладывает проблему (используя[NSTimer scheduledTimer...]
заставляет эту проблему появляться быстрее, чем при ручном добавлении ее в runloop.)
Это вызывает много проблем, потому что часы не обновляются в течение этого времени.
Я предполагаю, что это происходит потому, что macOS считает приложение отображения «неактивным» или «неактивным» в некотором роде.
Есть ли способ предотвратить, контролировать или обойти это поведение?