5.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 such as scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: ...
Get iOS 5 Programming Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.