如何查看NSTimers是否正在堆叠以及如何防止它?

时间:2014-04-20 06:21:42

标签: ios objective-c timer

我正在制作一款使用NStimer进行移动的iphone游戏。我发现有一个错误使定时器堆叠一些,但我发现原因是什么。有没有办法看到分配了多少计时器,有没有办法通过这样的事情来阻止它:

If(myTimer.numberOfAllocatedTimers == 0) {
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateme) userInfo:nil repeats:YES];
}

2 个答案:

答案 0 :(得分:0)

有关此代码使用位置的更多上下文会很有帮助。

然而,我会试着解释为什么会发生这种情况。

每次使用[NSTimer scheduledTimerWithTimeInterval ...]时,都会创建一个 new 计时器,并开始重复。如果您的代码在回调方法中创建了一个计时器,请参见下面的示例,您将堆叠计时器。

- (void)updateme {
    if ([NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateme) userInfo:nil repeats:YES]) {
    // This creates stacked timers!
    }
}

这是你应该怎么做的:

@property (nonatomic, strong) NSTimer *myTimer;
... 
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateme:) userInfo:nil repeats:YES];
...
- (void)updateme:(NSTimer *)timer {
    if (timer == self.myTimer) {
        // Do something because the timers are equal
    }
}

答案 1 :(得分:0)

试试这个:

// use this to start timer
myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSthing) userInfo:nil repeats:YES];

// use this to stop timer
if (myTimer) {
    [myTimer invalidate];
    myTimer = nil;
}