第一种示例:
//初始化定时器
_myTimer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(startLocation) userInfo:nil repeats:YES];
在初始化之后并不会调用,在添加下面这句将定时器假如主循环中的代码后5秒才开始调用startLocation方法,又要repeats:YES,所以这里是循环调用,假如NO只调用一次。
//将定时器假如主循环中
[[NSRunLoop mainRunLoop] addTimer:_myTimer forMode:NSDefaultRunLoopMode];
第二种示例:
//初始化定时器
_myTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(startLocation) userInfo:nil repeats:YES];
这种方式就是该定时器将在初始化时指定的timeInterval秒后自动触发(也就是在这句代码写完的后5秒循环调用startLocation方法)。
3、假如要立即开始:
//开启定时器
[_myTimer setFireDate:[NSDate distantPast]];
在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;(也就是在立即调用后,5秒之后又会调用启动定位的方法)
在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。(立即调用完就结束)
4、要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:
首先关闭定时器不能使用上面的方法,应该使用下面的方法:
关闭定时器:
//关闭定时器
[_myTimer setFireDate:[NSDate distantFuture]];
5、取消定时器:
//取消定时器
[_myTimer invalidate];
_myTimer = nil;
停止timer的运行,这个是永久的停止,这也是唯一一个可以将计时器从runloop中移出的方法。
这里要注意一下:
NSTimer可以精确到50-100毫秒.
NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个执行点,那么就pass继续执行其他的计划.
网友评论