iOS NSTimer使用详解-开启、关闭、移除
2014-12-10 10:35
260 查看
之前对定时器的使用有误区,所以特地研究了一下,这里也跟大家分享一下:
1、要使用一个定时器首先要定义一个定时器:
2、然后初始化,这里初始化有两种方式:
第一种:
+ (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;
这两种初始化方式是有区别的,假如你用第一种就要自己将这个计时器加入主循环中,否则不会调用selector后面的方法,但是第二种就是在初始化一个定时器的同时直接将这个定时器加入主循环,所以并不用自己添加,下面举例:
第一种示例:
第二种示例:
3、假如要立即开始:
在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;(也就是在立即调用后,5秒之后又会调用启动定位的方法)
在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。(立即调用完就结束)
4、要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:
首先关闭定时器不能使用上面的方法,应该使用下面的方法:
关闭定时器:
5、取消定时器:
这里要注意一下:
NSTimer可以精确到50-100毫秒.
NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个执行点,那么就pass继续执行其他的计划.
这些是我在使用定时器的一些总结,希望对大家有所帮助
1、要使用一个定时器首先要定义一个定时器:
@property (strong, nonatomic) NSTimer *myTimer;//定时器
2、然后初始化,这里初始化有两种方式:
第一种:
+ (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;
这两种初始化方式是有区别的,假如你用第一种就要自己将这个计时器加入主循环中,否则不会调用selector后面的方法,但是第二种就是在初始化一个定时器的同时直接将这个定时器加入主循环,所以并不用自己添加,下面举例:
第一种示例:
//初始化定时器 _myTimer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(startLocation) userInfo:nil repeats:YES];在初始化之后并不会调用,在添加下面这句将定时器假如主循环中的代码后5秒才开始调用startLocation方法,又要repeats:YES,所以这里是循环调用,假如NO只调用一次。
//将定时器假如主循环中 [[NSRunLoop mainRunLoop] addTimer:_myTimer forMode:NSDefaultRunLoopMode];
第二种示例:
//初始化定时器 _myTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(startLocation) userInfo:nil repeats:YES];这种方式就是该定时器将在初始化时指定的timeInterval秒后自动触发(也就是在这句代码写完的后5秒循环调用startLocation方法)。
3、假如要立即开始:
//开启定时器 [_myTimer setFireDate:[NSDate distantPast]];
在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;(也就是在立即调用后,5秒之后又会调用启动定位的方法)
在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。(立即调用完就结束)
4、要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:
首先关闭定时器不能使用上面的方法,应该使用下面的方法:
关闭定时器:
//关闭定时器 [_myTimer setFireDate:[NSDate distantFuture]];
5、取消定时器:
//取消定时器 [_myTimer invalidate]; _myTimer = nil;停止timer的运行,这个是永久的停止,这也是唯一一个可以将计时器从runloop中移出的方法。
这里要注意一下:
NSTimer可以精确到50-100毫秒.
NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个执行点,那么就pass继续执行其他的计划.
这些是我在使用定时器的一些总结,希望对大家有所帮助
相关文章推荐
- Linux的防火墙关闭与开启详解
- java程序员菜鸟进阶(四)oracle基础详解(四)oracle开启和关闭服务程序――解决安装oracle占用大量内存
- Win10使用打印机时提示打印机服务关闭如何开启打印机服务
- 如何使用命令行强制执行Web Application Service的开启和关闭?
- jquery移除、绑定、触发元素事件使用示例详解
- 端口详解 | 开启端口 | 关闭端口
- iOS中定时器NSTimer的使用/开启与关闭
- ServletContextListener使用详解(监听Tomcat启动、关闭)
- oracle基础详解(四)oracle开启和关闭服务程序——解决安装oracle占用大量内存
- CentOS(Linux) - SVN使用笔记(一) - 安装SVN过程及开启和关闭svn服务指令
- 使用Netstat命令 查看端口 控制端口开启和关闭
- [教程] Build.prop 系统参数属性详解,系统性能调整,功能开启关闭等。。。更新完毕。
- linux kvm命令virsh详解 开启 关闭 克隆
- iPhone/iPad应用使用麦克风的开启和关闭
- jquery移除、绑定、触发元素事件使用示例详解
- 将源码包安装的服务,加入系统服务,可以使用service开启和关闭
- 使用服务开启关闭暂停音乐
- 配置防火墙,开启80端口、3306端口 & iptables 使用详解
- [管理篇6]使用Linux Shell管理OpenStack的虚拟机——批量创建、开启、关闭虚拟机
- jQuery Colorbox弹窗插件使用教程小结、属性设置详解以及colorbox关闭