标签:
1,NStimer 的初始化方式有下面四种,分为timerWithTimeInterval和scheduledTimerWithTimeInterval开头的
1 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo; 2 + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo; 3 4 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo; 5 + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
2,初始化方法以timerWithTimeInterval和scheduledTimerWithTimeInterval开头的不同点
代码说明:
第一种情况
1 timer1 = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(time) userInfo:nil repeats:YES];//以timerWithTimeInterval开始的初始化 2 [[NSRunLoop currentRunLoop] addTimer:timer1 forMode:NSDefaultRunLoopMode];//需要手动addTimer:forMode: 将timer添加到一个runloop中 3 [timer1 fire];//需要调用系统自带的-(void)fire;方法来立即触发该定时器 4 5 - (void)time 6 { 7 if(allTime >1){ 8 allTime --; 9 //_codeLabel.text = [NSString stringWithFormat:@"%ds",allTime]; 10 }else{ 11 [timer setFireDate:[NSDate distantFuture]];//关闭定时器 12 } 13 }
第二种情况
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timedown) userInfo:nil repeats:YES];//scheduled开始的初始化 //自动触发,每隔1秒执行一次,因为scheduled的初始化方法将以默认mode直接添加到当前的runloop中 - (void)timedown { if (allTime > 1) { allTime --; _codeLabel.text = [NSString stringWithFormat:@"%ds",allTime]; }else{ [timer setFireDate:[NSDate distantFuture]];//关闭定时器 } }
第一种情况和第二种情况的效果是一样的,但是第一种情况需要手动添加到runloop中,然后在手动fire,而第二种则相比看上去简单一点。所以平时大家可以使用第二种的类型,代码简洁;
3,NSTimer的其他知识点
//这个是唯一一个可以将计时器从runloop中移出的方法。 - (void)invalidate;
//关闭定时器,当条件达到后不需要使用计时器时需要关闭,防止类存泄露,否则定时器会一直执行
[timer setFireDate:[NSDate distantFuture]];
//开启定时器,当需要再启动定时器时,可以调用此方法,不过前提是定时器没有被移除掉
[timer setFireDate:[NSDate distantPast]];
标签:
原文地址:http://www.cnblogs.com/yanshiyu25/p/4207004.html