您的位置:首页 > 其它

NSTimer 定时器的使用

2015-06-01 14:52 387 查看
在开发过程中,有时我们会需要用到计时或者是重复执行某个事件的功能。比如说,在手机发送验证码的功能当中的倒计时功能,每隔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并不一定适用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: