IOS 计时器 NSTimer

转载 2013年12月02日 16:03:55

1、初始化

+ (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;

注:不用scheduled方式初始化的,需要手动addTimer:forMode: 将timer添加到一个runloop中。

  而scheduled的初始化方法将以默认mode直接添加到当前的runloop中.


举例:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFired:userInfo:nil repeats:NO];

NSTimer *myTimer = [NSTimertimerWithTimeInterval:3.0 target:selfselector:@selector(timerFired:) userInfo:nilrepeats:NO];

[[NSRunLoopcurrentRunLoopaddTimer:myTimerforMode:NSDefaultRunLoopMode];

 

2、触发(启动)

当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。


可以使用-(void)fire;方法来立即触发该定时器;

注:You can use this method to fire a repeating timer without interrupting its regular firing schedule. If the timer is non-repeating, it is automatically invalidated after firing, even if its scheduled fire date has not arrived.

在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;

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

 

3、停止

- (void)invalidate;

这个是唯一一个可以将计时器从runloop中移出的方法。

 

注:

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

NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个点,那么下一个点就pass过去了.


使用代码例子:

在游戏循环中很好用的计时器
- (void)StartTimer
{
//repeats设为YES时每次 invalidate后重新执行,如果为NO,逻辑执行完后计时器无效
  [NSTimer  scheuledTimerWithTimeInterval:1.0/60.0  target: view  selector:@(timerAdvanced:) 
            userInfo:nil  repeats: YES];
}

- (void)timerAdvanced:(NSTimer *)timer//这个函数将会执行一个循环的逻辑
{
  //加一个计数器
  int  mTime;
  if (mTime == 0)
  {
    [timer invalidate];
    [self StartTimer];
  }
  mTime++;
  if(mTime >= 某个最大值MAXCOUNT)
    //处理某些逻辑
    。。。。。
    //在某处将 mTime重设为0
}
更多0

iOS——NSTimer的使用,计时器的简单创建

NSTimer用到的地方很多,这里仅以计时器作为例子,里面的代码可以应用在很多程序中。 以下是全部的源码。 #import "ViewController.h" @interface ViewC...
  • w582324909
  • w582324909
  • 2016年09月19日 08:47
  • 5503

ios NSTimer做的计时器(精确到微妙)

自己在学习过程中用到过NSTimer,当时在网上找了不少资料。现在自己做一个简单的demo跟大家分享。 我就直接在下面粘贴代码,希望能帮到一些初学iOS的朋友。 ViewController....
  • github_32516161
  • github_32516161
  • 2015年11月03日 09:34
  • 2374

NSTimer计时器后台运行的解决方法

思路: 切换至后台计时器暂停,记录下当前时间,切换回前台计时器回复,计算中间时间差 [[NSNotificationCenter defaultCenter] addObserver:self s...
  • lqzitongyezu
  • lqzitongyezu
  • 2016年08月10日 17:25
  • 1773

NSTimer的使用 停止 暂停 重启

NSTimer 调用了invalidate()方法  再调用fire方法是启动不了的,因为调用了invalidate()方法 是将timer作废了 需要重新创建对象才行 如果需要暂停 可以调用fire...
  • wahaha13168
  • wahaha13168
  • 2016年10月13日 09:40
  • 299

如何让NSTimer变相的在后台长时间运行

我们都知道NStimer 在iPhone里面后台的可以运行时间是3分钟。即使挂在前台,只要手机开始锁屏了。NSTimer会立即停止运行。即使如下面这样 - (void)applicationDidEn...
  • benyoulai5
  • benyoulai5
  • 2016年01月01日 14:22
  • 832

iOS UITableView和UITableViewCell滚动和NSTimer计时

UITableViewCell上有个UILabel,显示NSTimer实现的秒表时间,手指滚动UITableViewCell的过程中,label是否刷新。         这是否刷新取决于timer加...
  • shenhuaikun
  • shenhuaikun
  • 2017年03月20日 11:44
  • 919

让NSTimer在后台保持运行

使用NSTimer的时候,发现每次APP进入后台,或者屏幕休眠后,NSTimer就会暂停。为了解决这个问题,翻阅了各种博客和网页。最终在伟大的stackoverflow上找到了一个简单并且真正可行的解...
  • vladosama
  • vladosama
  • 2016年01月05日 11:07
  • 2036

有关定时器NSTimer使用

最近闲的没事看了一下定时器,那么就写下来,介绍一下定时器。 首先,说说定时器的应用场景:   1当我们需要反复间隔一段时间做的事情.   2当我们需要延时执行一些操作时候。(当然我们也可以使用 - ...
  • kuizhang1
  • kuizhang1
  • 2015年04月03日 22:35
  • 1279

NSTimer计时器的使用,创建后一定要销毁,不然会重复使用

计时器的使用,创建后一定要销毁,不然会重复使用 #pragma mark - 判断活动是否开始-倒计时 - (void)judementActiveTime {      ...
  • shiningchen322
  • shiningchen322
  • 2016年01月25日 14:36
  • 2251

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

之前对定时器的使用有误区,所以特地研究了一下,这里也跟大家分享一下:开启定时器,关闭定时器,取消定时器...
  • zyzxrj
  • zyzxrj
  • 2014年12月10日 10:35
  • 5850
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS 计时器 NSTimer
举报原因:
原因补充:

(最多只允许输入30个字)