码迷,mamicode.com
首页 > 移动开发 > 详细

iOS中定时器NStimer的使用

时间:2015-01-06 23:02:44      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

1,NStimer 的初始化方式有下面四种,分为timerWithTimeIntervalscheduledTimerWithTimeInterval开头的

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]];

 

iOS中定时器NStimer的使用

标签:

原文地址:http://www.cnblogs.com/yanshiyu25/p/4207004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!