7.14. 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 implementation file (.m
file):
#import "AppDelegate.h"
@interface
AppDelegate
()
@property
(
nonatomic
,
strong
)
NSTimer
*
paintingTimer
;
@end
@implementation
AppDelegate
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:
, the time becomes a scheduled timer and will fire the event you ...
Get iOS 7 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.