6.15. Creating Timers

Problem

You would like to perform a specific task repeatedly with a certain delay. For instance, you want to update a view on your screen every second that your application is running.

Solution

Use a timer:

- (void) paint:(NSTimer *)paramTimer{
  /* Do something here */
  NSLog(@"Painting");
}

- (void) startPainting{
  
  self.paintingTimer = [NSTimer 
                        scheduledTimerWithTimeInterval:1.0
                        target:self
                        selector:@selector(paint:) 
                        userInfo:nil
                        repeats:YES];
  
}

- (void) stopPainting{
  if (self.paintingTimer != nil){
    [self.paintingTimer invalidate];    
  }
}

- (void)applicationWillResignActive:(UIApplication *)application{
  [self stopPainting];
}

- (void)applicationDidBecomeActive:(UIApplication *)application{
  [self startPainting];
}

The invalidate method will also release the timer, so that we don’t have to do that manually. As you can see, we have defined a property called paintingTimer that is declared in this way in the header file (.h file):

#import <UIKit/UIKit.h>

@interface Creating_TimersAppDelegate : UIResponder <UIApplicationDelegate>

@property (nonatomic, strong) UIWindow *window;
@property (nonatomic, strong) NSTimer *paintingTimer;

@end

Discussion

A timer is an object that fires an event at specified intervals. A timer must be scheduled in a run loop. Defining an NSTimer object creates a nonscheduled timer that does nothing but is available to the program when you want to schedule it. Once you issue a call, e.g. scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

Get iOS 6 Programming Cookbook now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.