我正在设置一个计时器,以每隔13分钟触发一次。但是计时器似乎不定期触发。这是一个间歇性问题。一些用户报告了该问题,但我无法重现该问题。

- (void)resetIdleTimer
{
    if (_idleTimer)
    {
        [_idleTimer invalidate];
        [_idleTimer release];
        _idleTimer = nil;
    }

    _idleTimer = [[NSTimer scheduledTimerWithTimeInterval:13*60.0
                                                   target:self
                                                 selector:@selector(idleTimerExceeded)
                                                 userInfo:nil
                                                  repeats:NO] retain];
}

- (void)idleTimerExceeded
{
        // do some processing
    [_idleTimer release];
    _idleTimer = nil;
}


根据某些条件,计时器将被重置(resetIdleTimer),但是无论如何,这将重置计时器13分钟。

当我查看代码时,只能看到没有将计时器参数传递给选择器的问题。我不确定这是否是此问题的原因吗?有谁遇到过这种怪异现象? (任何我将如何更新代码以将timer作为参数)。
一位用户报告说,它只是在4分钟后发生的。

最佳答案

让我们确认一件事,不将计时器参数传递给选择器不会导致任何问题。

这是更新的代码,可以正常工作

@property(nonatomic,strong)NSTimer *myTimer;


要么

 @property(nonatomic,retain)NSTimer *myTimer;


方法

- (void)resetIdleTimer
{

  if ([self.myTimer isValid])
        [self.myTimer invalidate];

   self.myTimer = [NSTimer scheduledTimerWithTimeInterval:13*60.0
                                 target:self
                               selector:@selector(idleTimerExceeded)
                               userInfo:nil
                                repeats:NO];
}
- (void)idleTimerExceeded
{
  NSLog(@"tiggered");
}

10-08 19:29