目标C:NStimer-如何在n小时后停止计时器

时间:2015-07-07 06:52:50

标签: objective-c timer nstimer

我已经使用以下呼叫启动了计时器,需要在n小时后停止

self.timer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(sendLocationUpdates) userInfo:nil repeats:YES];

解决方案我可以在计时器启动时获取当前时间并保持增加时间直到达到阈值。或者有更好的方法来停止计时器吗?

2 个答案:

答案 0 :(得分:3)

将一个实例变量添加到类中以存储计时器的开始时间:

YourClass.m:

@interface YourClass () {
    NSTimeInterval _startTime;
}

@end

记录创建计时器时的当前时间:

self.timer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(sendLocationUpdates) userInfo:nil repeats:YES];
_startTime = [NSDate timeIntervalSinceReferenceDate];

并使用sendLocationUpdates方法测试当前时间:

#define TIMER_LIFE_IN_SECONDS 3000.0

- (void)sendLocationUpdates
{
    // do thing

    NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
    if (now - _startTime > TIMER_LIFE_IN_SECONDS) {
        [self.timer invalidate];
        self.timer = nil;
    }
}

答案 1 :(得分:0)

简单的解决方案

声明两个属性

@property NSInteger counter;
@property NSTimeInterval interval;

在启动计时器

之前将计数器设置为0
  self.counter = 0;
  self.interval = 20.0;
  self.timer = [NSTimer scheduledTimerWithTimeInterval:self.interval target:self selector:@selector(sendLocationUpdates) userInfo:nil repeats:YES];
sendLocationUpdates方法中的

递增计数器

  - (void)sendLocationUpdates
  {
    counter++;
    if (counter == 4 * (3600 / self.interval)) {
      [self.timer invalidate];
      self.timer = nil;
    }
   // do other stuff
  }

给定的时间间隔为20秒,计时器每小时发射180次。 在示例中,计时器在4小时后停止