I have an application that is supposed to log certain things every 1 second and I’m currently using NSTimer, but if my application transitions screens (or almost anything else, really) it slows down the timer a little bit making for inaccurate readings.
What is a reliable alternative to use? My current code is as follows:
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(update) userInfo:nil repeats:YES];
NSTimer is not guaranteed to fire exactly on time, ever. But you can use an NSTimer in a much more reliable way than you are now. When you use
scheduledTimerWithTimeIntervalyou create an NSTimer which is scheduled in the run loop forNSDefaultRunLoopMode. This mode is paused when the UI is being used, so your timers won’t fire when there is user interaction. To avoid this pause use the modeNSRunLoopCommonModes. To do this you will have to schedule the timer yourself like so: