[NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:NO];
当重复:设置为NO时,是否需要使指定选择器内的计时器无效?
谢谢
修改
另一个问题,如果它自我失效,
你如何正确取消这样的计时器?
由于无效的已经失效的计时器会崩溃我假设?
维护一个指向计时器的指针,并在选择器内将其设置为nil?
答案 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: