NSTimer 定时器的使用

     
     在开发过程中,有时我们会需要用到计时或者是重复执行某个事件的功能。比如说,在手机发送验证码的功能当中的倒计时功能,每隔3s图片自动跳转的功能等。这时,我们可以使用NSTimer 定时器。

在NSTimer 类当中,主要提供了以下方法:
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(id)ui repeats:(BOOL)rep NS_DESIGNATED_INITIALIZER;
- (void)fire;
- (void)invalidate;

在使用时,如果是非schedule方式初始化的NSTimer实例,需要用- (void)addTimer:(NSTimer *)timer forMode:(NSString *)mode方法,将实例加入到RunLoop当中。

使用方式:
 NSTimer *_timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(popToPreViewController) userInfo:nil repeats:NO];

说明:

TimeInterval:间隔时间

target:发送对象

selector:执行的方法

userInfo:此参数可以为nil,当定时器失效时,由你指定的对象保留和释放该定时器

repeats:是否重复执行,设为YES时,则每隔1.0s 执行 popToPreViewController方法

计时器停止:

[_timer invalidate];
_timer = nil;

当repeats设为YES时,self将会对_timer实例的引用计数+1,所以,当_timer 停止后,一定要将其制空,否则_timer是不会被释放的。


在使用的过程中,我们可能会在一个页面初始化的时候开启定时器,在页面关闭的时候停止,如果将

[_timer invalidate];

_timer = nil;

放在

- (void)dealloc

方法中,是不会去执行的,也就是说该计时器永远不会被释放。所以计时器停止的方法可以放在
- (void)viewDidDisappear:(BOOL)animated
方法中,这样就可以将其释放掉。


NSTimer 定时器是准时的吗?

答案是否定的。

当线程空闲时,NSTimer是比较准时的,但是当线程进行大量的操作时,定时器实际被触发的时间就会向后拖。

所以如果需要精准计时时,NSTimer并不一定适用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值