首页 > 代码库 > iOS中定时器NStimer的使用
iOS中定时器NStimer的使用
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]];
iOS中定时器NStimer的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。