Search code examples
nstimersleep

NSTimer continue during sleep mode


I have a timer app which uses a NSTimer to track minutes. How can I keep the timer going, even when the device is put into sleep mode? Thanks!


Solution

  • Adjust After Wake Notification

    Scheduled NSTimer instances will halt during sleep. Your application needs to respond to the NSWorkspace's wake notification and adjust its timers.

    If you do not respond to wake notifications, your timers will resume but without accounting for the time spent asleep.

    See Apple's technical note QA1340 Registering and unregistering for sleep and wake notifications for getting the appropriate notifications.

    Example

    Consider this situation:

    • Create a timer to trigger in 5 minutes
    • Wait 1 minute
    • Put the computer to sleep for an hour
    • Wake the computer
    • The timer resumes upon waking
    • The timer triggers 4 minutes after waking

    From the timer's perspective, five minutes has passed by. Note the language used by NSTimer, it uses relative durations rather than absolute times, scheduledTimerWithTimeInterval:invocation:repeats:.