在iOS工程中经常要使用定时器来做一些每隔一定时间就要进行重复操作的内容,或者有时需要经过一定时间做一些事件。一般这个时候都会使用定时器来完成这个事件。
定时器的创建
定时器的创建有两种方式
/**
* @param NSTimeInterval 间隔时间
* @param target 触发对象
* @param selector 调用方法
* @param userInfo 传递内容
* @param repeats 是否重复 YES:重复 NO:只执行一次
*/
//方式一:直接创建(已经加入到RunLoop中)
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerClike) userInfo:nil repeats:YES];
//方式二:创建后添加到RunLoop中
self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timerClike) userInfo:nil repeats:YES];
//添加早RunLoop中
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
//这样执行的方法在下一次中才会执行,如果想让方法立即执行要添加
[self.timer fire];
控制定时器
//定时器开
[self.timer setFireDate:[NSDate date]];
//或者 都可以
[self.timer setFireDate:[NSDate distantPast]];
//定时器关
[self.timer setFireDate:[NSDate distantFuture]];
//定时器销毁 销毁后只能重新创建不能再开启
[self.timer invalidate];
定时器传值和区分
//在一个界面中创建两个定时器 传值和区分可以使用它们的userInfo来实现
self.timerOne = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerClike:) userInfo:@"123" repeats:YES];
self.timerTwo = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerClike:) userInfo:@"abc" repeats:YES];
//传一个NSTimer 用timer.userInfo来区分
-(void)timerClike:(NSTimer *)timer
{
NSLog(@"timerClike_%@",timer.userInfo);
}
在iOS中有一个定时器与屏幕的刷新时间一致,就是CADisplayLink(无需设置刷新时间,屏幕刷新时间一致一秒60次)
//创建
CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(timerClike:)];
//添加到运行循环中
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
//销毁
[displyLink invalidate];
displyLink = nil;