(iphone)重复时我需要使计时器无效:不是吗?

时间:2011-03-04 08:20:47

标签: iphone objective-c ios timer invalidation

[NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:NO];

当重复:设置为NO时,是否需要使指定选择器内的计时器无效?

谢谢

修改

另一个问题,如果它自我失效,

你如何正确取消这样的计时器?
由于无效的已经失效的计时器会崩溃我假设?

维护一个指向计时器的指针,并在选择器内将其设置为nil?

5 个答案:

答案 0 :(得分:6)

不,计时器会使自己无效

答案 1 :(得分:1)

@Eugene如果您正在使用

[NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:YES];

然后在选择器方法中你需要给出一个像这样的函数

- (void)timerFireMethod:(NSTimer*)theTimer

所以当你想让它失效时你可以有这样的条件

if(workDone == YES)
{
   [theTimer invalidate];
}

但如果您在重复选项中使用NO,那么计时器将使自身无效。

答案 2 :(得分:1)

您可以保留标志以保存定时器是否已被触发。

例如。

    BOOL gameOver = NO;
    NSTimer * gameOverTimer;


-(void)startGame
{

     gameOverTimer =    [NSTimer scheduledTimerWithTimeInterval:600 target:self selector:@selector(stopLevel:) userInfo:nil repeats:NO]; 
     // your code
}

-(void)stopLevel:(id)sender
{
     gameOver = YES;
     // your code
}

-(void)levelFinishedSuccesfully
{
     // this method will get called if user finishes the level before your timer ends/stops the level. So the timer is valid and we need to invalidate it
     if(!gameOver)
     {
          [gameOverTimer invalidate];
          gameOverTimer = nil;
     }    
      // your code
}

希望这有帮助。

答案 3 :(得分:0)

如果重复为YES,计时器将反复重新安排自己,直到无效。如果为NO,计时器将在激活后失效。

答案 4 :(得分:0)

您缺少将计时器源添加到runloop

addTimer:forMode: