NSTimer 定时器的使用
2015-06-01 14:52
387 查看
在开发过程中,有时我们会需要用到计时或者是重复执行某个事件的功能。比如说,在手机发送验证码的功能当中的倒计时功能,每隔3s图片自动跳转的功能等。这时,我们可以使用NSTimer 定时器。
在NSTimer 类当中,主要提供了以下方法:
在使用时,如果是非schedule方式初始化的NSTimer实例,需要用- (void)addTimer:(NSTimer *)timer forMode:(NSString *)mode方法,将实例加入到RunLoop当中。
使用方式:
说明:
TimeInterval:间隔时间
target:发送对象
selector:执行的方法
userInfo:此参数可以为nil,当定时器失效时,由你指定的对象保留和释放该定时器
repeats:是否重复执行,设为YES时,则每隔1.0s 执行 popToPreViewController方法
计时器停止:
当repeats设为YES时,self将会对_timer实例的引用计数+1,所以,当_timer 停止后,一定要将其制空,否则_timer是不会被释放的。
在使用的过程中,我们可能会在一个页面初始化的时候开启定时器,在页面关闭的时候停止,如果将
[_timer invalidate]; _timer = nil;
放在
方法中,是不会去执行的,也就是说该计时器永远不会被释放。所以计时器停止的方法可以放在
NSTimer 定时器是准时的吗?
答案是否定的。
当线程空闲时,NSTimer是比较准时的,但是当线程进行大量的操作时,定时器实际被触发的时间就会向后拖。
所以如果需要精准计时时,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并不一定适用。
相关文章推荐
- Java Web 服务: WSDL 1.1 理解与建模
- Hopewell Project Sharing项目总结分享PPT
- Cordova 3.x 基础(4) -- deviceready事件
- 我的第一篇CSND博文
- GCC编译的背后( 预处理和编译 汇编和链接 )
- c#中的resx文件出现未能找到具有某个名称的类型
- poj1258(prime水题)
- 生产订单中的下层物料信息
- (4)mysql优化之数据库表设计优化
- Untiy assets报错找不到资源在guidmapper
- awk技巧
- java复习(八)
- Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的权利字符串" UserInfo=0x1bad30 {NSLocalizedDescription=未找到应用程序的“aps-environment”的权利字符串}
- 面试宝典
- 第五十八条:对可恢复的情况使用受检异常,对编程错误使用运行时异常
- JVM性能调优监控工具
- SeaJS与RequireJS最大的区别
- mysql下gps求2两点距离
- 云计算初步了解
- Combination Sum III