我正在制作一款使用NStimer进行移动的iphone游戏。我发现有一个错误使定时器堆叠一些,但我发现原因是什么。有没有办法看到分配了多少计时器,有没有办法通过这样的事情来阻止它:
If(myTimer.numberOfAllocatedTimers == 0) {
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateme) userInfo:nil repeats:YES];
}
答案 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;
}