无标题文章

iOS NSTimer使用详解-开启、关闭、移除

 定时器定时器详解ios定时器关闭定时器NSTimer

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后面的方法,但是第二种就是在初始化一个定时器的同时直接将这个定时器加入主循环,所以并不用自己添加,下面举例:

第一种示例:

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片

//初始化定时器

imer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(startLocation) userInfo:nil repeats:YES];

在初始化之后并不会调用,在添加下面这句将定时器假如主循环中的代码后5秒才开始调用startLocation方法,又要repeats:YES,所以这里是循环调用,假如NO只调用一次。

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片

//将定时器假如主循环中

RunLoop mainRunLoop] addTimer:_myTimer forMode:NSDefaultRunLoopMode];

第二种示例:

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片

//初始化定时器

imer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(startLocation) userInfo:nil repeats:YES];

这种方式就是该定时器将在初始化时指定的timeInterval秒后自动触发(也就是在这句代码写完的后5秒循环�调用startLocation方法)。

3、假如要立即开始:

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片

//开启定时器

[_myTimer setFireDate:[NSDate distantPast]];

在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;(也就是在立即调用后,5秒之后又会调用启动定位的方法)

在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。(立即调用完就结束)

4、要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:

首先关闭定时器不能使用上面的方法,应该使用下面的方法:

关闭定时器:

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片

//关闭定时器

[_myTimer setFireDate:[NSDate distantFuture]];

5、取消定时器:

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片

//取消定时器

[_myTimer invalidate];

_myTimer = nil;

停止timer的运行,这个是永久的停止,这也是唯一一个可以将计时器从runloop中移出的方法。

这里要注意一下:

NSTimer可以精确到50-100毫秒.

NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个执行点,那么就pass继续执行其他的�计划.

原网址:http://blog.csdn.net/zyzxrj/article/details/41842593

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 这篇文章中,我不会说多线程是什么、线程和进程的区别、多线程有什么用,当然我也不会说什么是串行、什么是并行等问...
    hashakey阅读 314评论 0 0
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,838评论 0 9
  • //不重复,只调用一次。timer运行一次就会自动停止运行myTimer = [NSTimer scheduled...
    西博尔阅读 152评论 0 0
  • 1. Activity ca.ct.activity.OBaccaratActivity has leaked w...
    束海阅读 246评论 0 0
  • iOS RunLoop进阶上一篇文章<从安卓的Looper到iOS RunLoop>谈论了安卓的Message,H...
    画个完美句号阅读 142评论 0 0