首页 > 代码库 > iOS中定时器NStimer的使用

iOS中定时器NStimer的使用

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的使用