我们可能要实现一个时钟,并且每分钟都要更新显示;或者想要向用户显示一条消息并且在一段时间之后让它消失。
我们可以使用NSTimer类来给应用程序添加这种功能。定时器允许我们在给定的时间段之后执行一段代码。
创建一个定时器最简单的方法就是使用类方法:
- NSTimer *myTimer = [NSTimer
- -cheduledTimerWithTime
- -nterval:10.0 target:self
- -elector:@selector(myTimerAction:)
- -serInfo:nil repeats:NO];
这将会创建一个定时器,它从现在开始10秒后调用myTimerAction:方法。注意userInfo参数:它允许我们向定时器方法传递任何对象。向repeats参数传递NO,意味着定时器方法将只调用一次。如果传递YES,定时器将会每10秒钟重复调用一次。
下面,我们实现myTimerAction:方法:
- -(void)myTimerAction:(NSTimer *)
- -imer
- {
- NSLog(@"timer fired!: %@",[timer
- -serInfo]);
- }
这个定时器把自身作为参数传递给该方法。注意在创建时间的时候,如何能够获得所添加的userInfo对象(在这个例子中,是nil)。
要停止一个定时器,可以调用如下代码:
- [myTimer invalidate];
也可以创建稍后才想要运行的定时器:
- myTimer = [[NSTimer timerWith
- -imeInterval:10.0 target:self
- -elector:@selector(myTimerAction:)
- -serInfo:nil repeats:NO] retain];
然后,当你准备好启动定时器的时候,使用如下代码:
- [[NSRunLoop mainRunLoop]
- -ddTimer:myTimer forMode:
- -SDefaultRunLoopMode];
创建一个定时器的另一种较少用到的方法,可以使用如下的代码:
- NSTimeInterval *secondsPerDay =
- 4*60*60;
- NSDate *tomorrow = [NSDate
- -ateWithTimeIntervalSinceNow:
- -econdsPerDay];
- myTimer = [[NSTimer alloc]
- -nitWithFireDate:tomorrow
- -nterval:10.0 target:self
- -elector:@selector(myTimerAction:)
- -serInfo:nil repeats:YES];
这段代码创建一个定时器,它明天运行并且每10秒钟重复一次。
其次,我们需要调用addTimer:forMode:来真正地启动定时器;最后,我们已经创建了一个定时器,它在一个确定的时间点第一次触发。程序清单1-8给出使用定时器的一个例子。
程序清单1-8使用定时器
